STM32的USART的RXNE不能置位或无法置位的原因

最近刚接触STM32的USART,发现问题还真是不少,本来觉得没什么,却是耽误了好久,这次遇到的问题是:STM32的USART的RXNE不能置位或无法置位。

是仿真的时候发现这个问题的,我用自发自收,发现发送的太快了,接收数据的数目就不对了,延迟200ms啊,再慢也应该发出去了,就查原因到一直进入发送中断,接收中断进不去,但是DR接收的数据正常,就是RXNE不置位。

自己解决无果,求助网络:

1.http://www.wisearm.com/articles/201305652.html

《《原文:今天我用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标志置位会产生中断的。》》

应该不是此文提到的情况,因为ORE没有置位,所以应该不是产生溢出,但是如果以后又出问题可以借鉴。

2.http://bbs.21ic.com/icview-359588-1-1.html

《《原文:“打开Peripherals下的USART窗口” 就有可能把标志位清0了。按理,关闭USART窗口 应该就行了。》》

结果出乎预料,竟是USART监视窗口出的问题,关闭此窗口后,仿真正常!

 

posted on 2015-01-14 15:45  Life's coding  阅读(6725)  评论(0编辑  收藏  举报

导航