0

私は STM8 を初めて使用し、IAR Embedded Workbench を使用して STM8S103F3 を使用しようとしています。C を使用して、レジスタを直接使用するのが好きです。14400 ボー、8N2 のシリアルが必要です。ネット上には優れたチュートリアルや例が数多くあるので、UART 送信を取得するのは簡単です。次に、割り込みでUARTを受信させる必要があります。他には何もしません。それが問題だ。iostm8s103f3.h (IAR) によると、0x14 ベクトル UART1_R_IDLE、UART1_R_LBDF、UART1_R_OR、UART1_R_PE、UART1_R_RXNE に 5 つの割り込みがあります。

Silverlight Developer: Registers on the STM8 によると、

Vector 19 (0x13) = UART_RX

ST Microelectronics STM8S.h によると

#define UART1_BaseAddress       0x5230
#define UART1_SR_RXNE  ((u8)0x20) /*!< Read Data Register Not Empty mask */
#if defined(STM8S208) ||defined(STM8S207) ||defined(STM8S103)     ||defined(STM8S903)
#define UART1 ((UART1_TypeDef *) UART1_BaseAddress)
#endif /* (STM8S208) ||(STM8S207)  || (STM8S103) || (STM8S903)  */

STM8S リファレンス マニュアル RM0016 によると、データがシフト レジスタから Rx バッファに転送されるときに、最後のサンプリング クロック エッジで RXNE フラグ (Rx バッファが空でない) が設定されます。これは、SPI_DR レジスタからデータを読み取る準備ができていることを示します。Rx バッファが空でない (RXNE) このフラグが設定されている場合、Rx バッファに有効な受信データがあることを示します。このフラグは、SPI_DR が読み取られるとリセットされます。それから私は書いた:

#pragma vector = UART1_R_RXNE_vector //as iostm8s103f3 is used, that means 0x14
__interrupt void UART1_IRQHandler(void)
{ unsigned character recd;
  recd = UART1_SR;
  if(1 == UART1_SR_RXNE) recd = UART1_DR;

よくありません。継続的に割り込みが発生し、UART1_SR_RXNE が設定されていますが、UART1_DR は空で、UART 受信は発生していません。これにベクトルできる他のすべての割り込みを無効にしましたが、それでもうまくいきません。SPI もこのフラグを設定します。おそらく、UART と SPI を一緒に使用することはできません。このシリアル受信割り込みを有効にする必要があります。助けてください。ありがとうございました

4

3 に答える 3