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大概的位置
最后进入这个函数并锁定问题