diff --git a/bspMCU/bsp_pin.c b/bspMCU/bsp_pin.c index 95ca770..ffa53cd 100644 --- a/bspMCU/bsp_pin.c +++ b/bspMCU/bsp_pin.c @@ -47,3 +47,28 @@ void delay_us(int nus) }; #endif } + +void hard_fault_handler_c(unsigned int *hardfault_args) +{ + unsigned int stacked_r0 = hardfault_args[0]; + unsigned int stacked_r1 = hardfault_args[1]; + unsigned int stacked_r2 = hardfault_args[2]; + unsigned int stacked_r3 = hardfault_args[3]; + unsigned int stacked_r12 = hardfault_args[4]; + unsigned int stacked_lr = hardfault_args[5]; // 链接寄存器 + unsigned int stacked_pc = hardfault_args[6]; // 程序计数器 + unsigned int stacked_psr = hardfault_args[7]; // 状态寄存器 + + // 打印寄存器现场 + log_a("====== HardFault Detected ======\r\n"); + log_a("R0 = 0x%08X, R1 = 0x%08X\r\n", stacked_r0, stacked_r1); + log_a("R2 = 0x%08X, R3 = 0x%08X\r\n", stacked_r2, stacked_r3); + log_a("R12= 0x%08X, LR = 0x%08X\r\n", stacked_r12, stacked_lr); + log_a("PC = 0x%08X, PSR= 0x%08X\r\n", stacked_pc, stacked_psr); + + // 打印故障状态寄存器 + log_a("HFSR = 0x%08X\r\n", SCB->HFSR); + log_a("CFSR = 0x%08X\r\n", SCB->CFSR); + log_a("BFAR = 0x%08X\r\n", SCB->BFAR); + log_a("MMFAR= 0x%08X\r\n", SCB->MMFAR); +}