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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版