Browse Source

【主线待合】增加STM32用于在hard_fault后打印信息的函数

master
Lizongdi 17 hours ago
parent
commit
c49a790b19
  1. 25
      bspMCU/bsp_pin.c

25
bspMCU/bsp_pin.c

@ -47,3 +47,28 @@ void delay_us(int nus)
}; };
#endif #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);
}

Loading…
Cancel
Save