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大概的位置

 

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

 

posted @ 2020-08-25 10:03  R1chie  阅读(2147)  评论(0编辑  收藏  举报