STM32呈现HardFault_Handler毛病的原因主要有两个方面:
1、内存溢出或许拜访越界。这个需求自己写程序的时分标准代码,遇到了需求渐渐排查。
2、仓库溢出。添加仓库的巨细。
呈现问题时排查的办法:
产生反常之后可首要检查LR寄存器中的值,确认当时运用仓库为MSP或PSP,然后找到相应仓库的指针,并在内存中检查相应仓库里的内容。因为反常产生时,内核将R0~R3、R12、LR、PC、XPRS 寄存器顺次入栈,其间LR即为产生反常前PC即将履行的下一条指令地址。
留意:寄存器均是32位,且STM32是小端方式。(参阅Cortex-M3威望)
编写问题代码如下:
void StackFlow(void)
{
}
{
}
DEBUG如下图
SP值为0x20008560,检查仓库里边的值顺次为R0~R3、R12、LR、PC、XPRS, 例如R0(10 27 00 00),
另一种办法:
默许的HardFault_Handler处理办法不是B .这样的死循环么?楼主将它改成BX LR直接回来的方式。然后在这条句子打个断点,一旦在断点中停下来,阐明犯错了,然后再回来,就可以回来到犯错的方位的下一条句子那儿
__asm
{
}
void HardFault_Handler(void)
{
}