IAR Embedded Workbenchを使用してSTM8を初めて使用し、STM8S103F3を使用しようとしています。 Cを使って、私はレジスタを直接使うのが好きです。 ネット上には数多くの良いチュートリアルとサンプルがあるので、私は14400ボー、8N2でシリアルが必要で、UARTの送信は簡単です。 それから、UARTが割り込みで受信する必要があります。他には何もしません。 それが問題です。 STM8にレジスタ、STM8割り込みシリアル受信
Vector 19 (0x13) = UART_RX
STによると: はiostm8s103f3.h(IAR)によれば、シルバー開発によると0x14のベクター UART1_R_IDLE、UART1_R_LBDF、UART1_R_OR、UART1_R_PE、UART1_R_RXNE
に5つの割り込みがありますマイクロエレクトロニクス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 によればRXNEフラグ(RXバッファない空)が最後のサンプリングクロックEに設定されていますデータがシフトレジスタから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は一緒に使用できません。 このシリアル受信割り込みを取得する必要があります。助けてください。 ありがとうございました