【NUCLEO H533RE】之六 串口overrun错误问题解决
偶然之中发现一个stm32的通用问题,就是串口接收错误死机(其实不是死机,是串口不能工作了)。
后来用其他stm32单片机,如stm32f系列也是有这个问题,特别是电路搭建的比较乱,波特率比较高就容易出现。
H533RE的nucleo板是很不容易发现的。
手上有个搭建的stm32f051板子就这样:
工作在9600 19200 38400 57600都没问题,工作在115200就有问题。
下图是出错的数据,接收到数据会点亮或者熄灭led。
因为搭建的电路干扰大,加上使用的内置时钟。
但无论什么问题。串口不能死机。
对stm32作一番分析后,发现stm32cubied产生的代码默认的错误溢出是允许中断,而且中断需要用户自己解决。
这样解决方案采取如下:
1,不用的DMA接收错误是必须关闭。
2,使用的Overrun要么关闭,要么采用函数处理。
使用的处理函数放在main.c中处理回调函数的地方:
3,尽量把电路搞规整点,适当条件下时候外部晶体。
4,不是要求高的时候莫把波特率调得老高。
本文来自论坛,点击查看完整帖子内容。