gd32运行ST HAL库Flash擦除失败问题

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));

你可能感兴趣的:(STM32,嵌入式硬件,stm32)