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

[复制链接]
5195|52
手机看帖
扫描二维码
随时随地手机跟帖
量子纠缠|  楼主 | 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这个中断吗?有哪些可能性?

因为板子没有高频的东西,所以我真的很难相信是因为布线或者器件摆放导致的。
a05a9a9e45bee4a5f78216edaa1e1b6.png
我看大家还是考虑软件问题  那就把我调试的截图放一些上来,麻烦帮我分析一下。下面两张图是我触发两次hard中断时的错误报告和错误定制地址0x0800042f。
f55a5e4382b864d5061e01a31c09305.png feffc594b065eab8f82474d96a212cb.png 02cb6ea3788f1d0b567cc51f79bd096.png

相关帖子

lihui567| | 2018-8-8 11:40 | 显示全部楼层
总线通信的程序去掉就正常了,是不是总线工作时出问题,看看总线通信这块

使用特权

评论回复
ningling_21| | 2018-8-8 11:42 | 显示全部楼层
用的有源晶振?

使用特权

评论回复
jackyhuang1988| | 2018-8-8 11:53 | 显示全部楼层
总线通信的程序去掉就正常了,那基本上是程序的问题了。数组越界了吧,查一下485用的缓冲区,看会不会哪些缓冲区定义太小,或者程序的BUG导致数组越界了。

使用特权

评论回复
Vansm| | 2018-8-8 13:23 | 显示全部楼层
看中断标志  是否没有为某个已经触发(或者误触发)的中断添加中断服务函数。

使用特权

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

GOOD LUCK FOR YOU

使用特权

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

或许是软件总线通信部分的问题

使用特权

评论回复
高IAI阳| | 2018-8-8 17:27 | 显示全部楼层
建议通过单步调试定位至引发中断的函数处,逐步分析。
另外引发硬中断的原因会记录在硬fault状态寄存器中(地址:)0xE000ED2c),可能的原因会是三种具体可参考权威指南,如果是上访造成的硬fault,对应的fault也会有各自的状态寄存器可以查看引发原因。

使用特权

评论回复
df_flying| | 2018-8-8 17:58 | 显示全部楼层
感觉软件的可能比较大,内存越界也会调到这里的

使用特权

评论回复
量子纠缠|  楼主 | 2018-8-8 20:00 | 显示全部楼层
高IAI阳 发表于 2018-8-8 17:27
建议通过单步调试定位至引发中断的函数处,逐步分析。
另外引发硬中断的原因会记录在硬fault状态寄存器中( ...

单步试过 由于中间很多时间,总需要跳过一些地方,所以总找不到。

使用特权

评论回复
ADS1993| | 2018-8-9 08:41 | 显示全部楼层
我有过类似的情况,但是和你这个不一样,我是自己手工焊接的五块板子跑程序没问题,贴片回来的跑同一个程序就不行,总会在某个引脚配置的地方卡死,配置引脚的那一行代码比较长,类似下面这样,后来我把它拆开写就好了,至今无解。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_3;

使用特权

评论回复
linshende| | 2018-8-9 08:52 | 显示全部楼层
总线通信的程序,运行中是否存在开关模块的动作。

使用特权

评论回复
jackyhuang1988| | 2018-8-9 09:08 | 显示全部楼层
源码发出来,给你查查。这种问题还卡一个月,项目黄了。

使用特权

评论回复
zhaoruzhe| | 2018-8-9 09:12 | 显示全部楼层
查一查寄存器SP的程序段地址,在那条语句卡住了。反查HardFault_Handler异常代码位置的方法有很多

使用特权

评论回复
877049204| | 2018-8-9 10:27 | 显示全部楼层
祝楼主好运

使用特权

评论回复
m16ak47| | 2018-8-9 11:21 | 显示全部楼层
排除程序问题,有可能是晶振旁边的电容没焊好或者时钟导致的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:一切有为法,如梦幻泡影,如露亦如电,应做如是观.

25

主题

158

帖子

8

粉丝