問題表現在片內FLASH只能寫0不能寫1,故想到可能是擦除失敗。
Debug發現果然HAL_FLASHEx_Erase(&FlashEraseInit,&SectorError);函數返回的FlashStatus始終是HAL_ERROR;
調試發現HAL庫中調取FLASH標志位時會出現錯誤,幾經修改都無法避免,甚至復位重燒都不起作用,只有通過STVP才能勉強擦除。
后來上網查閱資料發現有網友在擦除前先對FLASH標志位清除,便嘗試了一下。修改代碼后果然可以跑通,但是這種辦法應當存在隱患,相當於ban掉了這一步擦除時的FLAG判斷。
由於時間緊迫,以后再仔細研究到底是什么引起的置位錯誤標志位。
1 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR); 2 3