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

stm32调试时进入HardFault_Handler中断

[复制链接]
涯之彼端 提问时间:2014-11-14 00:55 /
用的是st-link/v2仿真器

仿真结果

仿真结果

程序代码

程序代码

收藏 1 评论21 发布时间:2014-11-14 00:55

举报

21个回答
涯之彼端 回答时间:2014-11-14 00:56:00
这个问题困扰了好久都没解决
llailmw 回答时间:2014-11-14 01:51:12
谢谢楼主,问题已解决
涯之彼端 回答时间:2014-11-14 09:51:53
楼上是怎么解决的??
沐紫 回答时间:2014-11-14 13:30:21
这么混乱,楼主的问题帮助3楼解决了自己的问题?
arm8686 回答时间:2014-11-14 14:14:31
时钟的初始化不对劲?超频了?
duanks 回答时间:2014-11-14 20:42:56
HardFault_Handler里加return,看看是执行完什么指令后进去的
小贾-370388 回答时间:2014-11-18 10:07:13
本帖最后由 小贾-370388 于 2014-11-18 10:16 编辑

STM32出现HardFault_Handler故障的原因主要有两个方面:

1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。

2、堆栈溢出。增加堆栈的大小。



出现问题时排查的方法:

发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、LR、PC、XPRS 寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。

注意:寄存器均是32位,且STM32是小端模式。(参考Cortex-M3权威)
楼主可以尝试这个方法HardFault_Handler函数添加BX LR语句直接返回的形式。然后在这条语句打个断点,一旦在断点中停下来,说明出错了,然后再返回,就可以返回到出错的位置的下一条语句那儿

__asm void wait()
{
      BX lr
}


void HardFault_Handler(void)
{
    /* Go to infinite loop when Hard Fault exception occurs */
       wait();
}

黄小狼 回答时间:2015-1-16 14:50:21
LZ,请问你这个问题是怎么解决的?
木易-357428 回答时间:2015-1-16 17:31:14
楼主,怎么执行完复位GPIO就没程序了呢?至少也应该有个while(1)吧?要不好像就跑飞了吧。。。
123下一页

所属标签

相似问题

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