GD32F450 pin to pin 替换STM32F429,运行STM32代码。做擦除扇区2和扇区3操作时(两个16KB大小的扇区),出现扇区2 Flash擦除失败,扇区3成功的异常情况。
并不是必现的,只是有一批设备出现该情况,具体原因未深究。这里只是提一下解决办法。
原始代码如下:
uint32_t SectorError = 0;
HAL_FLASH_Unlock();
FLASH_EraseInitTypeDef pEraseInit = {
.TypeErase = FLASH_TYPEERASE_SECTORS,
.Banks = bank,
.Sector = sector,
.NbSectors = 1,
.VoltageRange = FLASH_VOLTAGE_RANGE_3,
};
SectorError = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
HAL_FLASH_Lock();
异常时这里 SectorError 返回值不为0 。
调试发现是读取到错误标志位(FLASH_WaitForLastOperation)。
用如下函数清标志位后正常( 在HAL_FLASH_Unlock() 后面调用 )。
__HAL_FLASH_CLEAR_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR
| FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR));