Stm32 调试时发生HardFault_Handler

一般发生这种情况可能是内存越界操作或堆栈溢出。

排查方法:

 1.查看LR的值

首先要查看R14(LR)的值,确定当前堆栈指针是MSP还是PSP。

LR = 0xFFFFFFF9 为主堆栈(MSP),LR = 0xFFFFFFFD为线程堆栈(PSP)。

图中为0xFFFFFFF9,即MSP主堆栈。

2.根据MSP或PSP找到返回地址

MSP的值为0x200017C8,查看这个地址

 要知道MSP入栈的顺序,R0、R1、R2、R3、R12、返回address、PSR、LR

 我们想要的东西就是返回address,返回address就是发生异常前PC将要执行的下一条指令地址,即第六个:0x00008CCF

3.查看返回地址的函数

双击,查看map文件,找到0x00008CCF大概的位置

最后进入这个函数并锁定问题

原文地址:https://www.cnblogs.com/r1chie/p/13558091.html