STM32 擦除flash失败问题
硬件平臺STM32F407VE,HAL庫。標準庫不會有此問題
軟件跑freertos
問題描述:STM32 擦除flash失敗,CPU跳不出串口中斷,看門狗重啟。
問題一、FlashStatus!=HAL_OK解決辦法:
1、flash擦寫前禁止flash數據緩存,操作完后恢復
/* Disable data cache */
?? ? ?__HAL_FLASH_DATA_CACHE_DISABLE();//FLASH操作期間,必須禁止數據緩存
?? ??? ?/* Enable data cache */
? ? __HAL_FLASH_DATA_CACHE_ENABLE();//開啟數據緩存
2、如果上述辦法還不行可以在操作flash前增加清標志操作
? /* Clear pending flags (if any) */
? __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP ? ?| FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | \
? ? ? ? ? ? ? ? ? ? ? ? ?FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);
3、看門狗影響
操作flash期間不要調用HAL_IWDG_Refresh(&hiwdg);
并且看門狗未開啟或者屏蔽MX_IWDG_Init();的初始化
軟件最好不調用HAL_IWDG_Refresh(&hiwdg);
問題二:擦除flash失敗,死機問題
我用了串口空閑中斷+DMA接收、發送模式
?軟件仿真發現很容易在擦flash的時候CPU頻繁進入串口中斷(其他任務無法進入),最后復位
關鍵問題是:
HAL_UART_IRQHandler(&huart2);必須在中斷里優先執行,放在最前端,不能放在用戶程序以后。
如果不用flash擦寫,順序其實關系不大。
可能跟芯片也有關系(之前用F429就沒這個問題)
總結
以上是生活随笔為你收集整理的STM32 擦除flash失败问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Xilinx Zynq UltraSca
- 下一篇: HTML:1分钟实现简单网站导航栏