STM32呈现HardFault_Handler毛病的原因主要有两个方面:
1、内存溢出或许拜访越界。这个需求自己写程序的时分标准代码,遇到了需求渐渐排查。
2、仓库溢出。添加仓库的巨细。
呈现问题时排查的办法:
1、产生反常之后可首要检查LR寄存器中的值,确认当时运用仓库为MSP或PSP,然后找到相应仓库的指针,并在内存中检查相应仓库里的内容。由于反常产生时,内核将R0~R3、R12、Return address、PSR、LR寄存器顺次入栈,其间Return address即为产生反常前PC即将履行的下一条指令地址,因此在仓库中反数第三个字即为犯错方位。
2、默许的HardFault_Handler处理办法是B .将它改成BX LR直接回来的方式。然后在这条句子打个断点,一旦在断点中停下来,阐明犯错了,然后再回来,就可以回来到犯错的方位的下一条句子那儿。
这个有时分或许需求在反汇编形式下调试,由于可所以程序跑飞一瞬间才呈现HardFault_Handler。
3、仍是将中止函数修正,打印中止时的一些信息:
HardFault_Hander()界说如下:
void HardFault_Handler(void)
{
}