STM32串口接收中断失效问题的基本解决方法(HAL库),发生ORE溢出错误。

1.一般来说,串口接收中断的原始服务函数可以这样编写

STM32串口接收中断失效问题的基本解决方法(HAL库),发生ORE溢出错误。_第1张图片

 2.在串口初始化完成后,得打开RXNE以使能接收中断,

 由于打开了RXNE的接收中断,在正常条件下,CR1控制寄存器的RXNEIE位为1

STM32串口接收中断失效问题的基本解决方法(HAL库),发生ORE溢出错误。_第2张图片

 STM32串口接收中断失效问题的基本解决方法(HAL库),发生ORE溢出错误。_第3张图片

 3.串口在接收数据一段时间后,发现控制寄存器CR1的值发生了变化,状态寄存器SR的值也有所改变,可以发现,CR1的接收中断使能位被关闭了(原来是0x202C,现在是0x200C),SR的ORE(上溢错误)也被置1。这是由于串口接收数据过多溢出而导致的。如果串口助手一个字节一个字节地发送就不会发现这个问题。

STM32串口接收中断失效问题的基本解决方法(HAL库),发生ORE溢出错误。_第4张图片

 4.分析原因:在HAL_UART_IRQHandler(&huart3)中,如果发现ORE的错误,就会结束接收中断,进入错误回调函数中。

STM32串口接收中断失效问题的基本解决方法(HAL库),发生ORE溢出错误。_第5张图片

 5.解决方法:最根本的原因是接收中断被关闭了,所以编写错误回调函数时要重新开启接收中断,这只是一种make shift的办法,却能够简单地解决接收中断失效的问题。

STM32串口接收中断失效问题的基本解决方法(HAL库),发生ORE溢出错误。_第6张图片

 

你可能感兴趣的:(stm32,嵌入式硬件,单片机)