你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F030长时间运行后,串口会死掉

[复制链接]
zhy233090130 提问时间:2020-2-26 21:01 /
STM32F030与其它设备通讯两个多星期都正常,但是搁置了一个多月(板子一直没有下电)后测试发现不能与设备通讯了。板子重新上下电后才可以正常通讯,请问有什么方法可以解决该问题?
PS:使用的是HAL库,串口+DMA接收和发送。

收藏 评论14 发布时间:2020-2-26 21:01

举报

14个回答
mylovemcu 回答时间:2020-2-27 08:15:22
这种问题最不好处理  先要确定一下是不是单片机死机了  加一个指示灯闪烁判断一下(不可以在中断中闪烁灯  必须在主程序中)  死机的话就用看门狗可以复位  当然最好是找出来是什么问题  主要是软件设计的问题  可能有些中断位开启以后  没有在中断函数中消除中断标志  平时不用没有触发  长时间搁置后  由于环境其他因素导致触发以后陷入死循环  导致死机

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

zhy233090130 回答时间:2020-2-27 08:40:59
mylovemcu 发表于 2020-2-27 08:15
这种问题最不好处理  先要确定一下是不是单片机死机了  加一个指示灯闪烁判断一下(不可以在中断中闪烁灯   ...

程序里有看门狗的,不像是MCU死机了,另外串口中断中是清标志位的。测试串口通信两三个星期都没有问题,搁置一个多月后就不能与设备通讯了,感觉是MCU的串口模块死机了,能否有状态位可以知道串口死掉?
mylovemcu 回答时间:2020-2-27 08:54:11
zhy233090130 发表于 2020-2-27 08:40
程序里有看门狗的,不像是MCU死机了,另外串口中断中是清标志位的。测试串口通信两三个星期都没有问题, ...

没听过单独一个模块死机的  但串口有一个问题就是双方串口不能休眠  串口不支持热插拔  休眠以后就需要重新复位才能使用  
这种问题不好找原因  从头至尾检查一遍  硬件和软件  有隐患的地方都处理  偶发性的问题最难搞
zhy233090130 回答时间:2020-2-27 17:14:45
mylovemcu 发表于 2020-2-27 08:54
没听过单独一个模块死机的  但串口有一个问题就是双方串口不能休眠  串口不支持热插拔  休眠以后就需要重 ...

我现在发现这样的问题,MCU的串口波特率是9600,串口工具设置除9600外的值会造成MCU的串口通讯有问题,你有碰都过类似的情况吗?怎么处理的?谢谢!
mylovemcu 回答时间:2020-2-28 08:11:44
zhy233090130 发表于 2020-2-27 17:14
我现在发现这样的问题,MCU的串口波特率是9600,串口工具设置除9600外的值会造成MCU的串口通讯有问题,你 ...

是什么问题?误码率高吗?  误码率高的话 需要看双方的误码率都是多少  不同的主频不同的波特率会产生误码率   一般9600都是0误码率  比如51单片机选用11.0592MHz的晶振就是因为串口波特率的原因
zhy233090130 回答时间:2020-2-28 09:08:40
mylovemcu 发表于 2020-2-28 08:11
是什么问题?误码率高吗?  误码率高的话 需要看双方的误码率都是多少  不同的主频不同的波特率会产生误 ...

不是误码率的问题,串口工具用波特率9600与MCU通讯一直正常,用其它波特率如38400给MCU发数据后,串口工具改回9600,MCU也收不到数据也发不出数据,就需要把MCU上下电后才能正常收发
butterflyspring 回答时间:2020-3-6 17:02:20
串口的故障标志有处理么?增加一个出错处理吧。但还有一种可能,收到错误数据后处理时导致逻辑问题,这个方面也考虑一下吧
天臆弄人 回答时间:2020-3-7 11:02:33
是MCU死了,还是串口死了啊
zhy233090130 回答时间:2020-3-7 20:40:48
天臆弄人 发表于 2020-3-7 11:02
是MCU死了,还是串口死了啊

MCU有看门狗没死,应该是串口模块死了
天臆弄人 回答时间:2020-3-9 08:10:02
zhy233090130 发表于 2020-3-7 20:40
MCU有看门狗没死,应该是串口模块死了

那就简单了啊,要么串口一直是中断了,要么串口波特率误码太高了,不能识别
废鱼 回答时间:2020-3-9 11:11:17
楼主可能是发生过溢出中断,再溢出发生以后,需要重新初始化串口。
zhy233090130 回答时间:2020-3-10 18:45:00
安 发表于 2020-3-9 11:11
楼主可能是发生过溢出中断,再溢出发生以后,需要重新初始化串口。

不能正常通讯后,给MCU发数据还是可以进入串口中断的,只是数据都是0。现在处理的方式是连续5次收到数据都是0就重新初始化串口。
水晶之泪0517 回答时间:2020-3-10 19:32:30
清除串口接收溢出标识就可以了
zhy233090130 回答时间:2020-3-13 12:46:54
水晶之泪0517 发表于 2020-3-10 19:32
清除串口接收溢出标识就可以了

好的,谢谢!这两天再测试一下
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版