STM32/STM8技术william hill官网
直播中

王凯

7年用户 1311经验值
私信 关注
[问答]

STM32出现HardFault_Handler如何解决?

STM32出现HardFault_Handler故障该如何解决?

回帖(5)

刘丽

2018-10-18 15:48:44
之前有遇到过类似的问题,有两个原因可能会导致,你可以排查一下:
1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。
2、堆栈溢出。增加堆栈的大小。
举报

张桂兰

2018-10-18 15:49:21
出现问题时排查的方法:

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,但有时烧入不正确导致不一致。
举报

张波

2018-10-18 15:49:38
重新烧录待调试代码生成的.axf文件
举报

h1654155275.5614

2018-10-18 15:49:50
设计程序时候一定要规范。
举报

杨帆

2018-10-18 15:50:04
是要慢慢查,写规范点比较容易避免这种问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分