STM32|STM32 HardFault_Handler故障一例

测试时不小点碰到STM32单片机电源,造成电源高频跳动,再启动后程序运行灯不亮,点击Stop按钮发现程序挂在 HardFault_Handler(void) 循环中。右键单击堆栈列表项,发现出错位置代码:return m_nVer == m_pData->nVer; 这一句是检测备份Flash数据的版本,我在系统中写了一段程序,用于断电时保存数据到Flash中,再加电时从Flash中恢复,由于电源高频跳动Flash出现了错误。打开Peripherals >Core Peripherals >FaultReports查看:
STM32|STM32 HardFault_Handler故障一例
文章图片

上图画圈表示总线故障,读内存错误,地址是0x081E1ABE,正是保存数据版本的位置,查看内存都是问号,分析问题原因可能是电源反复快速开关,破坏了Flash信息。
STM32|STM32 HardFault_Handler故障一例
文章图片

解决方法是:进入HardFault_Handler(void)后,判断如果是读Flash错误,不执行死循环而跳出。主程序中重新初始化Flash,问题解决。
【STM32|STM32 HardFault_Handler故障一例】幸好在测试时发现问题,如果在应用现场,后果不堪设想。谢谢老天!

    推荐阅读