请教一个奇怪的问题 硬件HardFault_Handler中断

[复制链接]
1504|49
 楼主 | 2018-8-8 10:49 | 显示全部楼层 |阅读模式
本帖最后由 量子纠缠 于 2018-8-8 19:57 编辑

悬赏100元。跪求帮助,被这个问题卡住一个月了,再搞不定项目黄了。

一个板子做了两版    两版的器件和原理图完全相同,下载同一个程序。

第一版工作正常
第二版运行大概10秒-1分钟  就会出现死机,用软件调试会发现是触发了HardFault_Handler中断

由于两版软件完全相同,初步排除软件问题,所以网上所说的数组越界,内存溢出等原因我感觉没有可能,我也尝试用那些方法去追踪,但是每次的定位位置都不同,也没看出原因。所以分析为硬件问题。

硬件使用的STM32F103C8T6 整个板子使用12M晶振 运行在72M。电源使用的DCDC电路,DCDC是300K的。
在程序中将总线通信的程序去掉之后,问题消失。

所以进一步判断为 总线通信的硬件电路引起的HardFault_Handler中断。

目前检查过板子好几遍,不存在焊接问题和器件焊错问题,此问题可在第二版这一批的每个板子上复现。所以是批量问题。。。

我已经在这个问题上纠结了一个月了,实在没有办法了。想请教一下大家,硬件问题有可能引起HardFault_Handler这个中断吗?有哪些可能性?

因为板子没有高频的东西,所以我真的很难相信是因为布线或者器件摆放导致的。

我看大家还是考虑软件问题  那就把我调试的截图放一些上来,麻烦帮我分析一下。下面两张图是我触发两次hard中断时的错误报告和错误定制地址0x0800042f。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2018-8-8 11:40 | 显示全部楼层
总线通信的程序去掉就正常了,是不是总线工作时出问题,看看总线通信这块
| 2018-8-8 11:42 | 显示全部楼层
用的有源晶振?
| 2018-8-8 11:53 | 显示全部楼层
总线通信的程序去掉就正常了,那基本上是程序的问题了。数组越界了吧,查一下485用的缓冲区,看会不会哪些缓冲区定义太小,或者程序的BUG导致数组越界了。
| 2018-8-8 13:23 | 显示全部楼层
看中断标志  是否没有为某个已经触发(或者误触发)的中断添加中断服务函数。
| 2018-8-8 13:27 | 显示全部楼层
另外像HardFault_Handler这种问题仔细看看内核手册  看看哪些可以引起HardFault_Handler中断 逐个排查  不至于弄得项目都黄了
 楼主 | 2018-8-8 15:51 | 显示全部楼层

无源
 楼主 | 2018-8-8 15:52 | 显示全部楼层
Vansm 发表于 2018-8-8 13:23
看中断标志  是否没有为某个已经触发(或者误触发)的中断添加中断服务函数。 ...

你说的这个我排查过 已排除
 楼主 | 2018-8-8 15:54 | 显示全部楼层
我的前提是  同一个程序在第一版的硬件上完全正常,,在第二版的硬件上就会出问题。。。。在这种情况下,我可否得出软件没有问题的结论。我看评论还是都在谈论软件问题。

评论

高IAI阳 2018-8-8 17:33 回复TA
硬件有可能会导致软件出问题,但还得从软件程序来定位具体引发错误的原因。 
| 2018-8-8 16:06 | 显示全部楼层
本帖最后由 Vansm 于 2018-8-8 16:36 编辑

GOOD LUCK FOR YOU
| 2018-8-8 16:26 | 显示全部楼层
lihui567 发表于 2018-8-8 11:40
总线通信的程序去掉就正常了,是不是总线工作时出问题,看看总线通信这块 ...

或许是软件总线通信部分的问题
| 2018-8-8 17:27 | 显示全部楼层
建议通过单步调试定位至引发中断的函数处,逐步分析。
另外引发硬中断的原因会记录在硬fault状态寄存器中(地址:)0xE000ED2c),可能的原因会是三种具体可参考权威指南,如果是上访造成的硬fault,对应的fault也会有各自的状态寄存器可以查看引发原因。
| 2018-8-8 17:58 | 显示全部楼层
感觉软件的可能比较大,内存越界也会调到这里的
 楼主 | 2018-8-8 20:00 | 显示全部楼层
高IAI阳 发表于 2018-8-8 17:27
建议通过单步调试定位至引发中断的函数处,逐步分析。
另外引发硬中断的原因会记录在硬fault状态寄存器中( ...

单步试过 由于中间很多时间,总需要跳过一些地方,所以总找不到。
| 2018-8-9 08:41 | 显示全部楼层
我有过类似的情况,但是和你这个不一样,我是自己手工焊接的五块板子跑程序没问题,贴片回来的跑同一个程序就不行,总会在某个引脚配置的地方卡死,配置引脚的那一行代码比较长,类似下面这样,后来我把它拆开写就好了,至今无解。
  1. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_3;
复制代码
| 2018-8-9 08:52 | 显示全部楼层
总线通信的程序,运行中是否存在开关模块的动作。
| 2018-8-9 09:08 | 显示全部楼层
源码发出来,给你查查。这种问题还卡一个月,项目黄了。
| 2018-8-9 09:12 | 显示全部楼层
查一查寄存器SP的程序段地址,在那条语句卡住了。反查HardFault_Handler异常代码位置的方法有很多
| 2018-8-9 10:27 | 显示全部楼层
祝楼主好运
| 2018-8-9 11:21 | 显示全部楼层
排除程序问题,有可能是晶振旁边的电容没焊好或者时钟导致的
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /2 下一条

快速回复 返回顶部 返回列表