Flash Operating on STM32 And HardFault Check
前言 近期客戶開始研究STM32G031 Flash讀寫,因客戶在寫入Flash使用官網給的Sample code然後再加入Timer 中斷後會持續跑入HardFault_Handler(),我開始研究Flash狀態與HardFault_Handler檢查程序 HardFault_Handler檢查程序 首先這邊和網路上不同使用的是STM32cudeIDE非MDK,因此網站上所建立的偵錯方法可能不完全適用。這邊先介紹會進入HardFault原因 記憶體溢位或則訪問越界。 堆疊溢位。 檢查方法 使用STM32內建檢查 單步執行尋找 使用內建檢查如下圖可以直接初步檢查問題所在,結果如下方所顯示 第二種方法是使用單步執行或設定斷點(最原始方法) Flash Operating Flash Write HAL_FLASH_Unlock() 檢查FLASH_SR 中的 BSY 位 FLASH_CR 寄存器中的 PG 位置 1 寫入 HAL_FLASH_Lock(); 官方的宣告涵式 下方是官方給的sample code Flash Read 演示結果 這邊使用STM32CubeProgrammer 去看內部Flash的數值可以看到全部寫入了12345678 注意事項 由上面演示結果來看Flash可以在指定位置寫入你要的數值,但這邊要注意可以看一下,下面圖程式執行前後內部Flash結果可以看到在一開始程式執行時候就有固定區域存有資料,因此如果把固定區域覆寫其他資料就會造成執行錯誤進入HardFault_Handler(下圖程式裡面加入Timer中斷程式因此紀錄的原始位置比起純粹的寫入還要多)這邊請參考stm32g0 reference manual P70 來把起始寫入位置做改動才能正常運行如果要單純在指定位置寫入資料請參考STM32GO中Flash充当EEPROM的操作 參考 怎么查找STM32的硬件错误HardFault_Handler? 手把手教你查詢stm32 HardFault_Handler除錯及問題方法 STM32GO中Flash充当EEPROM的操作 FLASH Programming in STM32 STM32 Flash …