STM32F407运行半个月后出现死机

2019-07-14 15:04发布

产品是做工控的,MCU采用的STM32F407,双MCU用SPI通讯,1块做通讯,一块做控制。产品具有单机独立工作和主备从并联工作两种方式,并联时采用的CAN总线通讯,控制采用modbus TCP通讯到控制室。目前遇到问题,当产品单机独立运行时没有问题,采用主备从并联方式运行时,主机、备机、从机之间采用CAN总线交互数据,主机运行时,备机处于待机状态,从机运行状态跟随主机,主机在运行半个月后,通讯芯片出现死机,通讯中断,状态指示灯闪烁停止,控制芯片正常运行,控制停止输出,工作自动切换到备机运行,备机由待机状态切换为运行,从机正常工作。主机断电恢复后,启动到待机模式,又工作半个月后,备机通讯芯片死机,控制芯片正常运行,由于通讯芯片死机,中断输出。工作自动切换到主机运行,从机正常工作。各位大神帮忙分析一下,这种现象问题会不会出现在CAN通讯部分?还是其他问题啊?会不会是系统预分配的堆栈空间不够,溢出引起的?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
jsdfuweurw
1楼-- · 2019-07-16 04:23
我曾经试过使用UCOS+LWIP做网络通讯的应用,运行一段时间后也是程序死机,也怀疑过堆栈后加大堆栈空间,问题照样存在。。。一直也找不到原因,后来只能加个看门狗勉强应付了
dsdfshf
2楼-- · 2019-07-16 06:45
小弟浅见,觉得问题偏向软件部分,
1.可能堆栈异常,例如某个子程序,开的一个变量缓冲不够,一开始也没问题,等频繁调用时,慢慢造成你的PC指针或者溢出。
2. 还有一种就是can使用中断方式,是否使用了过多的操作,因为断开没问题,只有联网通讯才出现。

3.可以只保留CAN通讯功能,把其应用的先删除,再试试,会不会出现,这个可以区分是底层的硬件方面的,还是应用层出的问题,缩小范围吧。 建议多搭几套测试环境,看看是那种环境出来的

以上仅供lz参考, 开发最大的工作就是找思路的DEBUG
safag
3楼-- · 2019-07-16 08:17
 精彩回答 2  元偷偷看……
60user92
4楼-- · 2019-07-16 13:30
确定是重启就好了?
那也有2种情况:1、硬件问题。芯片有问题,看看硬件设计和选型上是否有不合理的地方。
2、软件问题,但软件问题可以看产品,如果所有产品都是如此,那就是软件问题,如果有一部分没事,那和软件就没关系了。如果是软件问题,建议加打印输出,然后一直运行,当停止运行时,将当时状态输出查看。
冷冷萧魂丶芮
5楼-- · 2019-07-16 19:23
dsdfshf 发表于 2018-12-21 21:02
小弟浅见,觉得问题偏向软件部分,
1.可能堆栈异常,例如某个子程序,开的一个变量缓冲不够,一开始也没问题,等频繁调用时,慢慢造成你的PC指针或者溢出。
2. 还有一种就是can使用中断方式,是否使用了过多的操作,因为断开没问题,只有联网通讯才出现。

恩,现在能排除堆栈异常了,只能继续找问题,开发产品容易,找BUG太困难了。谢谢了
冷冷萧魂丶芮
6楼-- · 2019-07-17 00:08
safag 发表于 2018-12-21 21:21
我之前遇到过类似问题,后来发现是STM32 CAN通信有个错误计数保护机制,当发现CAN总线错误帧超过128时自动离线。有两个解决办法,CAN芯片初始化或关闭错误计数自动离线功能(在STM32 CAN配置里)。
这个别的没事个别板有问题 原因还是你那CAN总线布线在运行中受干扰问题。最好顺带优化下那CAN线,双绞线首末两端加120欧电阻 ...

你好,请问CAN离线能引起整个系统死机?

一周热门 更多>