STM32 HardFault_Handler故障一例

    測試時不小點碰到STM32單片機電源,造成電源高頻跳動,再啓動後程序運行燈不亮,點擊Stop按鈕發現程序掛在 HardFault_Handler(void) 循環中。右鍵單擊堆棧列表項,發現出錯位置代碼:return m_nVer == m_pData->nVer; 這一句是檢測備份Flash數據的版本,我在系統中寫了一段程序,用於斷電時保存數據到Flash中,再加電時從Flash中恢復,由於電源高頻跳動Flash出現了錯誤。打開Peripherals >Core Peripherals >FaultReports查看:

上圖畫圈表示總線故障,讀內存錯誤,地址是0x081E1ABE,正是保存數據版本的位置,查看內存都是問號,分析問題原因可能是電源反覆快速開關,破壞了Flash信息。

解決方法是:進入HardFault_Handler(void)後,判斷如果是讀Flash錯誤,不執行死循環而跳出。主程序中重新初始化Flash,問題解決。

幸好在測試時發現問題,如果在應用現場,後果不堪設想。謝謝老天!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章