完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
产品是做工控的,MCU采用的STM32F407,双MCU用SPI通讯,1块做通讯,一块做控制。产品具有单机独立工作和主备从并联工作两种方式,并联时采用的CAN总线通讯,控制采用modbus TCP通讯到控制室。目前遇到问题,当产品单机独立运行时没有问题,采用主备从并联方式运行时,主机、备机、从机之间采用CAN总线交互数据,主机运行时,备机处于待机状态,从机运行状态跟随主机,主机在运行半个月后,通讯芯片出现死机,通讯中断,状态指示灯闪烁停止,控制芯片正常运行,控制停止输出,工作自动切换到备机运行,备机由待机状态切换为运行,从机正常工作。主机断电恢复后,启动到待机模式,又工作半个月后,备机通讯芯片死机,控制芯片正常运行,由于通讯芯片死机,中断输出。工作自动切换到主机运行,从机正常工作。各位大神帮忙分析一下,这种现象问题会不会出现在CAN通讯部分?还是其他问题啊?会不会是系统预分配的堆栈空间不够,溢出引起的?
|
|
相关推荐
20个回答
|
|
can通讯使用的驱动芯片发热过吗 会爆掉 你查查看
|
|
|
|
|
|
|
|
建议在系统空闲时定期初始化CAN
|
|
|
|
我遇到过多次爆掉的情况 请问您重启之后就正常收发了 还是说用示波器卡过波形 |
|
|
|
因为是工业设备,一年365天都在运行,没有空闲时间,因为从机的工作状态是从主机来,如果从机和备机检查5个工作周期没有接受到主机信息,则备机会替换掉主机工作。 |
|
|
|
重启后就正常收发了,而且用示波器测试波形也是正常的数据帧 |
|
|
|
这种问题一般是只能你自己解决,想要知道原因并彻底解决问题,建议将打印信息输出来,监控程序运行流程,关键时候打印出出错时相关参数。做好了这些后才能追溯你的问题。老老实实一步一步来吧,其他都是猜,没实际意义。
|
|
|
|
|
|
|
|
这种偶然性的死机很麻烦,我也遇到过蛮多次
1.硬件问题 被静电打死的情况比较多,你试试花两块钱买个打火机,把里面那个啥拿出来(会放电的那个),在产品外壳上作死的打 PCB布局不合理,电源不稳定等,这个拿示波器慢慢测吧 2.软件问题 比较艹蛋,如果是发生比较多,可以用仿真器连着,然后看芯片的情况 如果是偶然性的,那就尝试做个串口或者其他的能显示出来的方式,把一些怀疑的地方打印出来 没什么好的帮助,祝楼主好运 |
|
|
|
程序运行后开始工作就没有初始化代码了,也无硬件发热情况,而且从机是一样的装置,并没有出现死机现象。单机也不出现死机 |
|
|
|
sdfjaslkdjf1 发表于 2018-12-21 19:24 硬件经过静电测试的,也通过EMC测试,没有问题; 软件出问题至少都是工作半个月,仿真器仿真不到这么久,而且一死机连modbusTCP都停止工作了,显示系统状态的指示灯也不闪烁了,但是晶振肯定是有波形的,示波器测试得到。 |
|
|
|
充电搜索 发表于 2018-12-21 18:46 我把通讯的相关参数全部通过modbusTCP送到上位机了,出现问题后modbusTCP停止,停止前的参数都是正常的,通过仿真器,一般仿真器连续仿真几天就不错了,但是我们设备一般出问题至少都超过半个月,也没办法仿真,现在我只能扩大堆栈空间,已经开始做老化测试了,希望有用吧 |
|
|
|
本帖最后由 cheny3922 于 2018-4-19 08:58 编辑
是不是某个变量溢出了判断失败,比如一个毫秒计数器a,然后判断条件if((a>(b+500))b=a,dosomething;如果a计数到最大后再计数就变成0,然后判断一直就不成立了 |
|
|
|
我曾经试过使用UCOS+LWIP做网络通讯的应用,运行一段时间后也是程序死机,也怀疑过堆栈后加大堆栈空间,问题照样存在。。。一直也找不到原因,后来只能加个看门狗勉强应付了
|
|
|
|
小弟浅见,觉得问题偏向软件部分,
1.可能堆栈异常,例如某个子程序,开的一个变量缓冲不够,一开始也没问题,等频繁调用时,慢慢造成你的PC指针或者溢出。 2. 还有一种就是can使用中断方式,是否使用了过多的操作,因为断开没问题,只有联网通讯才出现。 3.可以只保留CAN通讯功能,把其应用的先删除,再试试,会不会出现,这个可以区分是底层的硬件方面的,还是应用层出的问题,缩小范围吧。 建议多搭几套测试环境,看看是那种环境出来的 以上仅供lz参考, 开发最大的工作就是找思路的DEBUG |
|
|
|
我之前遇到过类似问题,后来发现是STM32 CAN通信有个错误计数保护机制,当发现CAN总线错误帧超过128时自动离线。有两个解决办法,CAN芯片初始化或关闭错误计数自动离线功能(在STM32 CAN配置里)。
这个别的没事个别板有问题 原因还是你那CAN总线布线在运行中受干扰问题。最好顺带优化下那CAN线,双绞线首末两端加120欧电阻 |
|
|
|
确定是重启就好了?
那也有2种情况:1、硬件问题。芯片有问题,看看硬件设计和选型上是否有不合理的地方。 2、软件问题,但软件问题可以看产品,如果所有产品都是如此,那就是软件问题,如果有一部分没事,那和软件就没关系了。如果是软件问题,建议加打印输出,然后一直运行,当停止运行时,将当时状态输出查看。 |
|
|
|
dsdfshf 发表于 2018-12-21 21:02 恩,现在能排除堆栈异常了,只能继续找问题,开发产品容易,找BUG太困难了。谢谢了 |
|
|
|
safag 发表于 2018-12-21 21:21 你好,请问CAN离线能引起整个系统死机? |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32串口接受中断使用C++STL中的queue导致所有中断失效
3835 浏览 1 评论
2752 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1292 浏览 0 评论
3606 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
3415 浏览 4 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-3 13:52 , Processed in 0.864614 second(s), Total 108, Slave 91 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号