1.一般来说,串口接收中断的原始服务函数可以这样编写
2.在串口初始化完成后,得打开RXNE以使能接收中断,
由于打开了RXNE的接收中断,在正常条件下,CR1控制寄存器的RXNEIE位为1
3.串口在接收数据一段时间后,发现控制寄存器CR1的值发生了变化,状态寄存器SR的值也有所改变,可以发现,CR1的接收中断使能位被关闭了(原来是0x202C,现在是0x200C),SR的ORE(上溢错误)也被置1。这是由于串口接收数据过多溢出而导致的。如果串口助手一个字节一个字节地发送就不会发现这个问题。
4.分析原因:在HAL_UART_IRQHandler(&huart3)中,如果发现ORE的错误,就会结束接收中断,进入错误回调函数中。
5.解决方法:最根本的原因是接收中断被关闭了,所以编写错误回调函数时要重新开启接收中断,这只是一种make shift的办法,却能够简单地解决接收中断失效的问题。