血泪教训,关于STM8单片机串口接收中断

2019-12-09 19:13发布

STM8单片机接工控屏,有接收中断和发送中断,带步进电机,每个脉冲产生一个中断,以及各种外部中断,内部定时器中断。

设计基本完成。在步进电机运转时,遇到一个无规律的重启(看门狗溢出复位)。关闭看门狗,故障为无规律的类似代码跑飞或死机现象。

先检查代码,没发现问题,怪自己还too young,指责客户的供电,安装,电磁干扰等原因造成,让客户仔细排查,又让客户搭一个小型测试模型,已去干扰。

然后,在模型中测试,依然无规律复位重启!
确定不是单片机受干扰引起了。然后回到代码上分析。

预估为反复进入某中断。因为程序的中断太多,不宜设置断点分析,只好定义一个256字节数组,记录最近256次进入了那些中断。每进一个中断,记录一下。
结果定位在串口接收中断,反复进入,阻塞了其它中断和代码运行。
根据串口状态,查出过载错误置位,这个也会进入接收中断。

教训:在接收中断里面,不但要清除接收到数据标志位,还要清除其它引起这个中断的其它标志位!

大家使用STM8和STM32的串口的,引以为鉴。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
46条回答
skystalker
1楼-- · 2019-12-12 20:44
过载 噪声 什么的BIT在进入HAL处理前都要清
bailangcn
2楼-- · 2019-12-12 21:07
lingdianhao 发表于 2019-10-18 13:06
stm32这坑我也踩过,开启接收中断时溢出中断就被开启了,而且你并不能关掉溢出中断,它是和接收中断绑定到 ...

哈哈哈哈哈 我还以为就只有我遇到过呢
modbus
3楼-- · 2019-12-12 22:37
还是喜欢51的串口,简单可靠,不容易出BUG
xymxym
4楼-- · 2019-12-12 23:15
lb0857 发表于 2019-10-18 15:46
这个坑 估计需要三五天才能爬出来 话说 一个大牛电工的青葱岁月大都是在坑里度过的呢 ...

是啊,关键对老电工来说,往往是一坑还比一坑深
foxpro2005
5楼-- · 2019-12-13 00:12
 精彩回答 2  元偷偷看……
xiepan2010
6楼-- · 2019-12-13 03:16
https://www.xiaopingtou.cn/data/attach/1912/d3unk3ujjuus47qrbyqfw8al3hwxaj6c.jpg 本帖最后由 xiepan2010 于 2019-10-18 21:24 编辑

这个问题我也遇到过  不过调试的时候就发现了  也就顺手解决了  
是串口的溢出中断  默认是开启这个的   也没找到怎么用库函数关闭溢出中断   直接用寄存器关掉的

TIM截图20191018212344.jpg (129.76 KB, 下载次数: 0)

下载附件

2019-10-18 21:24 上传

一周热门 更多>