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

stm32程序停在void HardFault_Handler(void)

[复制链接]
勒布朗 提问时间:2013-9-7 12:17 /
程序停在void HardFault_Handler(void),求大神啊,快苦恼死了
收藏 评论6 发布时间:2013-9-7 12:17

举报

6个回答
Chris-392747 回答时间:2013-9-7 23:30:36

RE:stm32程序

问题太不详细了吧
沐紫 回答时间:2013-9-9 11:30:31

RE:stm32程序停在void HardFault_Handler(void)

楼主把代码贴出来,大伙帮你看看吧
wenshijian 回答时间:2013-9-9 12:35:58

RE:stm32程序停在void HardFault_Handler(void)

一般是FLASH访问错误,估计是你的指针指向的地址超出了地址区间。
不过也可能是其他原因,具体问题具体分析
fengye5340 回答时间:2013-9-10 15:27:09

RE:stm32程序停在void HardFault_Handler(void)

这个问题在使用F3F4的时候经常碰到,有时候能够很快就解决了,有时候也无法找到原因。
   在打开FPU功能后,需要确认 系统启动文件里面是否开启了FPU功能,预定义里面是否加入FPU功能的编译码,还有,初始化变量最好设置为0,别空。
   总体来说,出现这个错误主要是两个方面:
1、内存溢出或者访问越界
2、堆栈溢出。增加堆栈的大小。
   
出现问题时排查的方法:(建议参考一下)
1、发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、Return address、PSR、LR寄存器依次入栈,其中Return address即为发生异常前PC将要执行的下一条指令地址,因此在堆栈中反数第三个字即为出错位置。
2、默认的HardFault_Handler处理方法是B .将它改成BX LR直接返回的形式。然后在这条语句打个断点,一旦在断点中停下来,说明出错了,然后再返回,就可以返回到出错的位置的下一条语句那儿。
这个有时候可能需要在反汇编模式下调试,因为可以是程序跑飞一会儿才出现HardFault_Handler。
3、还是将中断函数修改,打印中断时的一些信息:
HardFault_Hander()定义如下:
[plain] view plaincopyprint?
    void HardFault_Handler(void)
    {
    uint32_t r_sp ;
    r_sp = __get_PSP(); //获取SP的值
    PERROR(ERROR,Memory Access Error!);
    Panic(r_sp);
    while (1);
    }
xiahouzuoxin 回答时间:2013-10-12 00:19:38

回复:stm32程序停在void HardFault_Handler(void)

一般可能是指针使用的问题,调试方法请参考我在CSDN的博文http://blog.csdn.net/xiahouzuoxin/article/details/10068455
jsam123 回答时间:2013-10-12 23:18:19

回复:stm32程序停在void HardFault_Handler(void)

 检查一下数据类型

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版