我是 STM8 的新手,并尝试使用 STM8S103F3,使用 IAR Embedded Workbench。使用 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 开发人员:在 STM8 上注册,
Vector 19 (0x13) = UART_RX
根据意法半导体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不能一起使用。我非常需要让这个串行接收中断继续。请帮忙。谢谢