问题表现在片内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