你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F4调用STMFLASH_Write总是写入失败

[复制链接]
STMCU小助手 发布时间:2022-4-21 21:00
解决办法:
在擦除flash之前调用FLASH_ClearFlag( FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);

如下:

  1. void STMFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite)        
  2. {
  3.   FLASH_Status status = FLASH_COMPLETE;
  4.         u32 addrx=0;
  5.         u32 endaddr=0;        
  6.   if(WriteAddr<STM32_FLASH_BASE||WriteAddr%4)return;        //非法地址
  7.         FLASH_Unlock();                                                                        //解锁
  8.   FLASH_DataCacheCmd(DISABLE);//FLASH擦除期间,必须禁止数据缓存
  9.                  
  10.         addrx=WriteAddr;                                //写入的起始地址
  11.         endaddr=WriteAddr+NumToWrite*4;        //写入的结束地址
  12.         if(addrx<0X1FFF0000)                        //只有主存储区,才需要执行擦除操作!!
  13.         {
  14.                 while(addrx<endaddr)                //扫清一切障碍.(对非FFFFFFFF的地方,先擦除)
  15.                 {
  16.                         if(STMFLASH_ReadWord(addrx)!=0XFFFFFFFF)//有非0XFFFFFFFF的地方,要擦除这个扇区
  17.                         {   
  18.                                 FLASH_ClearFlag( FLASH_FLAG_EOP |  FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);
  19.                                 status=FLASH_EraseSector(STMFLASH_GetFlashSector(addrx),VoltageRange_3);//VCC=2.7~3.6V之间!!
  20.                                 if(status!=FLASH_COMPLETE)break;        //发生错误了
  21.                         }else addrx+=4;
  22.                 }
  23.         }
  24.         if(status==FLASH_COMPLETE)
  25.         {
  26.                 while(WriteAddr<endaddr)//写数据
  27.                 {
  28.                         if(FLASH_ProgramWord(WriteAddr,*pBuffer)!=FLASH_COMPLETE)//写入数据
  29.                         {
  30.                                 break;        //写入异常
  31.                         }
  32.                         WriteAddr+=4;
  33.                         pBuffer++;
  34.                 }
  35.         }
  36.   FLASH_DataCacheCmd(ENABLE);        //FLASH擦除结束,开启数据缓存
  37.         FLASH_Lock();//上锁
  38. }


复制代码

收藏 评论0 发布时间:2022-4-21 21:00

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版