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

求助:程序进入HardFault硬件中断中

[复制链接]
ceiven 提问时间:2020-11-23 10:26 /
程序运行时会莫名的进入HardFault硬件中断中,尝试了一周的时间,试过以下方法始终不能找到问题出在哪里,希望有人能指导下:1.换硬件,依然出现,可以排除硬件自身原因;
2.在代码中加入nop()问题消失,再加一个nop()问题又出现;
3.将代码中一个计数的变量判断条件>4000改成>4001问题消失,改回4000问题又出现;
4.程序中用到了AD中断,定时器中断,串口中断,在进入HardFault后这些中断还在正常运行,可以排除是这些中断导致进入HardFault;
一周尝试下来,确定的现象就是将代码改动一下问题就会消失或者重新出现,但是编译大小都是55KB左右,均在64KB以内,不会超出,不知你们有没有遇到相似的情况呢? 或者能否提供点其他方向上的尝试?非常感谢
备注:芯片是f030,用标准库开发
收藏 评论3 发布时间:2020-11-23 10:26

举报

3个回答
byronsong 回答时间:2020-11-23 11:41:28
之前写过一个关于hardfault诊断的帖子,可以按步做下实验

https://www.stmcu.org.cn/module/forum/thread-621377-1-1.html
陌路夕颜 回答时间:2020-11-23 13:11:59
STM32出现硬件错误可能有以下原因:
        (1)数组越界操作;
        (2)内存溢出,访问越界;
        (3)堆栈溢出,程序跑飞;
        (4)中断处理错误;
  • void HardFault_Handler(void)



  • {



  •   /* Go to infinite loop when Hard Fault exception occurs */



  •         volatile int a = 1;



  •         a++;



  • //  while (1);

  •     }
  • 然后在a++处打断点,这样一旦发生hardFault就会进入该断点,然后我们可以使用单步调试,下一步就会跳出该函数,返回调用HardFault的地方。这样就定位到了错误处


butterflyspring 回答时间:2020-11-30 14:59:48
通常通过编译器的call stack可以查到发生错误的地址,从而推断出发生的原因。甚至可以将断点放在那里,重新复位后调试。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版