初级会员

- 积分
- 121
- 金钱
- 121
- 注册时间
- 2020-2-26
- 在线时间
- 30 小时
|
原子哥提供的代码中:
if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD,WriteAddr,(uint64_t)pBuffer)!=HAL_OK)//写入数据
{
break; //写入异常
}
直接循环写入256bit的数据
在我的项目中,要存储数据前,先把已经存在里面的数据读取出来,然后擦除扇区,然后再把新的数据加进去,然后再把更新后的数据写回去。
写的过程中,出现了只能写入几个256bit的问题。找了一天半的原因,从hal库到各种代码,到其它平台上的验证。在F103战舰上移植了一段是成功的,F103的STMFLASH.c文件写的与H743是不一样的。最终找到了原因,造成写入失败的原因可能是在连续写入过程中,写入并没有完全结束的时候,又开始写下一个256bit的数据。这个原因我是不确定的,不知道有没有大佬知道为什么。
但是,我通过在HAL_FLASH_Program后面加一个delay_us的延时后,确实是解决了。而且随着延时时间的增加,从90%写失败,到50%,到10%,到完全成功。
if(FlashStatus==HAL_OK)
{
while(WriteAddr<endaddr)//写数据
{
HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD,WriteAddr,(uint64_t)pBuffer);
delay_us(us_16);
FlashStatus=FLASH_WaitForLastOperation(FLASH_WAITETIME,FLASH_BANK_1); //等待上次操作完成
WriteAddr+=32;
pBuffer+=8;
}
}
通过在每次写256bit后加一个延时,这个问题好歹是解决了。
|
|