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

在部分GD32F450设备上,替换STM32F429后,执行扇区2和3的擦除操作时遇到扇区2擦除失败但扇区3成功的问题。该问题非必现,可能原因是错误标志位导致。解决方案是在解锁后清除FLASH的相关错误标志位,从而恢复正常操作。
摘要由CSDN通过智能技术生成

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值