串口常见问题之ORE错误

                                                 

问题:UART5不能正常接收摄像头数据

原因:串口的抢占优先级不同导致抢占优先级高的串口(UART5)发生ORE错误(中文参考手册683)

实例分析:

       省赛使用三个串口,USART1(蓝牙),USART3(定位系统),UART5(摄像头),其中USART1目前不接受数据,所以不用考虑其对其他串口接收中断的影响。

       USART3中断优先级配置:

UART5中断优先级配置:

USART3每5ms进一次中断,UART5每40ms进一次中断,而USART3的抢占优先级又高于UART5,UART5不能及时清除RXNE标志位,导致ORE产生。

那么为什么会发生呢?

首先我们做了以下操作,使能了RXNE

又根据

因此ORE产生。

 

 

 

 

解决方法:

方法一:

原理:

方法二:

       在串口初始化里使能ERR中断

         在中断函数里写:

       需要注意:

另外注意:

1.    串口优先级不要随便配。我建议串口抢占优先级配成一样,CAN抢占优先级配成一样,定时器抢占优先级最低(级别最高),为0。至于响应优先级,繁忙的那个配低一点(级别最高)。如果有人反驳,并且有依据的话,麻烦帮我修改一下文档。谢谢。

2.    如解决方法一,以后有if,必写else!

3.    无论标准库函数,还是自己写。局部临时变量必须初始化!至于为什么,现在已经能用实例给出答案,请参考“定时器bug后续”。

4.    如第一张图所说,发生这种错误时,串口会丢数,请注意!

如若想详细了解中断,请参考中文参考手册第十章,中断与事件。

如若只想以实际应用为出发点了解中断,参考新浪博客,stm32中断优先级彻底讲解

本文参考:360个人图书馆 关于USART接收中断的BUG和注意事项

你可能感兴趣的:(stm32)