STM32如果Flash写入内容错误

通过先擦除flash扇区后写入的方式往Flash中写数据,但再次读出后内容和写入的不同。

此时,应该通过断点调试,重点检测擦除flash是否执行的比较快,如果擦除一闪而过,同时擦除后的对应地址没有变为全0xff,说明未执行擦除,紧接着写入肯定会出问题。

问题的原因就是:擦除函数写的太简单,必须:先解锁flash,然后清除标志位,然后设置各项参数执行擦除,然后上锁(如果紧跟flash写入,且写入后有上锁,则此时上锁貌似不是必须?)。

uint8_t flash_erase(uint32_t StartSector)
{
	FLASH_EraseInitTypeDef EraseInitStruct;
	uint32_t SECTORError = 0;

  HAL_FLASH_Unlock();
	/* Clear pending flags (if any) */  
  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | 
                         FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);

//  StartSector = GetSector(address);

//  EndSector = GetSector(address+size);

  EraseInitStruct.TypeErase     = FLASH_TYPEERASE_SECTORS;
  EraseInitStruct.VoltageRange  = FLASH_VOLTAGE_RANGE_3;
  EraseInitStruct.Sector        = StartSector;
  EraseInitStruct.NbSectors     = 1;
	if(HAL_FLASHEx_Erase(&EraseInitStruct, &SECTORError)!=HAL_OK)
	{
		return 0;
	}
	HAL_FLASH_Lock();
	return 1;
}

没有加清除标志位的话,貌似有时候可以正确写入,估计是刚开始flash没出错。一旦出错,因为没有清除错误标志,后续的擦除操作都会被跳过。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值