STM32 擦除flash失败问题
硬件平臺STM32F407VE,HAL庫。標(biāo)準(zhǔn)庫不會有此問題
軟件跑freertos
問題描述:STM32 擦除flash失敗,CPU跳不出串口中斷,看門狗重啟。
問題一、FlashStatus!=HAL_OK解決辦法:
1、flash擦寫前禁止flash數(shù)據(jù)緩存,操作完后恢復(fù)
/* Disable data cache */
?? ? ?__HAL_FLASH_DATA_CACHE_DISABLE();//FLASH操作期間,必須禁止數(shù)據(jù)緩存
?? ??? ?/* Enable data cache */
? ? __HAL_FLASH_DATA_CACHE_ENABLE();//開啟數(shù)據(jù)緩存
2、如果上述辦法還不行可以在操作flash前增加清標(biāo)志操作
? /* 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期間不要調(diào)用HAL_IWDG_Refresh(&hiwdg);
并且看門狗未開啟或者屏蔽MX_IWDG_Init();的初始化
軟件最好不調(diào)用HAL_IWDG_Refresh(&hiwdg);
問題二:擦除flash失敗,死機(jī)問題
我用了串口空閑中斷+DMA接收、發(fā)送模式
?軟件仿真發(fā)現(xiàn)很容易在擦flash的時候CPU頻繁進(jìn)入串口中斷(其他任務(wù)無法進(jìn)入),最后復(fù)位
關(guān)鍵問題是:
HAL_UART_IRQHandler(&huart2);必須在中斷里優(yōu)先執(zhí)行,放在最前端,不能放在用戶程序以后。
如果不用flash擦寫,順序其實關(guān)系不大。
可能跟芯片也有關(guān)系(之前用F429就沒這個問題)
總結(jié)
以上是生活随笔為你收集整理的STM32 擦除flash失败问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Xilinx Zynq UltraSca
- 下一篇: 电脑技术 计算机专业技能分类,电脑操作员