STM32出现HardFault_Handler如何解决?

2019-07-14 16:47发布

STM32出现HardFault_Handler故障该如何解决?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
Shype
1楼-- · 2019-07-14 23:06
出现问题时排查的方法:

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()定义如下:

void HardFault_Handler(void)
{
   uint32_t r_sp ;

   r_sp = __get_PSP(); //获取SP的值
  PERROR(ERROR,Memory Access Error!);
   Panic(r_sp);
   while (1);

}
实际中Keil调试模式时,若已烧入stm32的代码与待调试的代码不一致,则调试时会异常进入硬件错误。
通常进入调试模式时会将待调试代码的.axf文件烧入stm32,但有时烧入不正确导致不一致。
青上也
2楼-- · 2019-07-15 02:34
 精彩回答 2  元偷偷看……
dsgdadsad
3楼-- · 2019-07-15 05:21
设计程序时候一定要规范。
HengDu
4楼-- · 2019-07-15 08:08
是要慢慢查,写规范点比较容易避免这种问题。

一周热门 更多>