小虾丁 发表于 2017-8-7 10:24:18

STM32F429NIH的USART2的问题

这几天遇到一个很奇怪的问题,使用STM32F429NIH的USART2,只使能接收中断,发现收到数据后,能顺利进入到中断服务函数,但观察状态寄存器,发现RXNE位并没有被置位,被置位的是IDLE位。(如果不使能接收中断,是不会进入中断服务函数的)。 使用USART1则没有这个问题。想请教下大家有没有遇到这个问题?是不是STM32F429的USART2自身有缺陷呢?

小虾丁 发表于 2017-8-8 09:09:38

我自己解答一下: 单步调试是观察不到RXNE的置位状态的,至于为什么,我就不知道了。:L

无薪税绵 发表于 2017-10-18 09:44:22

答案在这里:http://www.wisearm.com/articles/201305652.html

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

第二种情况,就是收到数据后,RXNE本来是已经置位了,但在调试到下一条语句的时候,不管下一条语句是什么,在执行之前,RXNE自动归零了。

wofei1314 发表于 2017-10-18 09:52:49

学习学习~

denvice 发表于 2017-10-18 09:53:18

中断标志位通过断点来看不准确,曾经我就遇见过类似问题,别设置断点,通过全局变量保存相关的寄存器,再去查看。
页: [1]
查看完整版本: STM32F429NIH的USART2的问题