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 阅读(6856) 评论(0) 编辑 收藏 举报