STM32 产生hard-fault 调试方法
当STM32 产生Hard Fault的时候可以打印出一些重要的寄存器信息,然后定位代码出错的地方。
https://github.com/ferenc-nemeth/arm-hard-fault-handler
下面是核心代码。
void HardFault_Handler(void)
{__asm volatile("TST LR, #0b0100; ""ITE EQ; " //判断堆栈指针使用的是MSP还是PSP。"MRSEQ R0, MSP; " // 如果是MSP则将MSP的值放在R0,作为ReportHardFault函数的第一个参数。"MRSNE R0, PSP; " // 如果是MSP则将MSP的值放在R0,作为ReportHardFault函数的第一个参数。"MOV R1, LR; " // 将LR的值放在R1寄存器,作为ReportHardFault函数的第二个参数。"B ReportHardFault; " //跳转到ReportHardFault函数,在这个函数可以打印出产生hard fault时候的堆栈信息。);
}