自学内容网 自学内容网

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)
    {

    }
}


原文地址:https://blog.csdn.net/qq_40008325/article/details/143094612

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!