进入中断后需要清除中断标志位void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT),才能再次进入。读DR会清除中断标志位,如果不读DR就需要用上面那个函数来清除。
在调试stm32f0系列时使能了串口接收空中断,也就是说在串口收到最后一个数据后,在一个接收字节的时间里没有收到接下来的数据,那么这个空中断就会被执行。
如果使能了空接收中断,需要在进入空接收中断中再次读取一下接收寄存器的值,如果不读取会导致重复进入串口接收中断!
串口异常出错,需要在串口中断处理的相关函数中,添加异常回调函数,并在回调函数里重新开始接受数据;
首先你用示波器来看下到底有没有接收端的数据波形,要是没有的话就是你串口终端初始化有问题,或者就是在你的中断中没有清除标志位。
进入中断记得清楚中断标志位。有的是硬件自动清除,有的则需要你软件清除。
否则是可能不停进中断的。
本文标签:stm32接收中断重复进入