[STM32] 2013-05-31 09:58 我来说两句  

STM32芯片的USART(串口)的RXNE不能置位或无法置位的原因。

今天我用IARv5.5和自写固件库对STM32进行调试,通过串口助手发送数据0x55,0xAA。查看了寄存器状态USART1_DR已经为正确,但是USART1_SR中的RXNE没有被置位。USART1_SR仍为初始化时的0XC0。为什么USART1_SR中的RXNE没有置位?我一直在找原因,在搜索了好多篇文档之后,我终於在参考手册中找到了以下答案。

ORE:过载错误
当RXNE还是1的时候,当前被接收在移位寄存器中的数据要往RDR寄存器中传送时,硬件将该位置位。如果USART_CR1中的RXNEIE为1的话,则产生中断。由软件序列将其清零(先读USART_SR,然后读USART_CR)。
0:没有过载错误;
1:检测到过载错误。
注意:该位被置位时,RDR寄存器中的值不会丢失,但是移位寄存器中的数据会被覆盖。如果EIE位被设置,在多缓冲器通信模式下,ORE标志置位会产生中断的。

 

第二种情况,就是收到数据后,RXNE本来是已经置位了,但在调试到下一条语句的时候,不管下一条语句是什么,在执行之前,RXNE自动归零了。
这种情况,刚开始不知道是什么引起的,后果查了下其它网页,貌似跟IAR的调试窗口有关,我看了下,果然我现在的调试窗口是开着USART1在看
然后,我随便切换到其它寄存器,这个问题就解决了。(具体环境,IAR 7.4, STM32F030F4)