stm32 挂死定位(死循环)
1,调式程序时先看初始化和轮询点灯流程,如果灯没有闪烁则表明程序进入了死循环。
2,程序调式进入调式debug接口;
3,打断点依次运行;
4,查看寄存器;
LR在异常后通常为0xFFFFFFFx,指示异常前的返回地址。根据LR的ReturnStack判断PSP或MSP,找到栈顶获取返回地址,从而追溯到异常发生前的代码位置.
程序异常后 LR会是以下的一种。
5,dissassemly进入查看反汇编;
当进入中断时,CPU依次将xPSR,PC(Return Address),LR,R12,R3-R0压入堆栈。
如果进入了HardFault
中断,LR
寄存器的值为0xFFFFFFxx
;此时看SP
寄存器的值;SP
寄存器是RAM
的某个地址。
0x08000735查看程序挂死位置。
HardFault
属于异常,所以出现HardFault,
挂死原因。
/*** @brief This function handles Hard Fault exception.***/
void HardFault_Handler(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
}