STM32F407 FLASH存储不连续问题请教

2019-12-10 18:20发布

FLASH存储时第二次写入数据时会覆盖第一次写入的数据,两次写入的地址分别是addr+100和addr+200.地址在有效范围内,一下是写程序
void Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite)       
{
  FLASH_Status status = FLASH_COMPLETE;
        u32 addrx=0;
        u32 endaddr=0;       
  if(WriteAddr<STM32_FLASH_BASE||WriteAddr%4)return;        //非法地址
        FLASH_Unlock();                                                                        //解锁
       
  FLASH_DataCacheCmd(DISABLE);//FLASH擦除期间,必须禁止数据缓存
               
        addrx=WriteAddr;                                //写入的起始地址
        endaddr=WriteAddr+NumToWrite*4;        //写入的结束地址
        if(addrx<0X1FFF0000)                        //只有主存储区,才需要执行擦除操作!!
        {
                while(addrx<endaddr)                //扫清一切障碍.(对非FFFFFFFF的地方,先擦除)
                {
                        if(STMFLASH_ReadWord(addrx)!=0XFFFFFFFF)//有非0XFFFFFFFF的地方,要擦除这个扇区
                        {   
                                status=FLASH_EraseSector(STMFLASH_GetFlashSector(addrx),VoltageRange_3);//VCC=2.7~3.6V之间!!
                                if(status!=FLASH_COMPLETE)break;        //发生错误了
                        }else addrx+=4;
                }
        }
        if(status==FLASH_COMPLETE)
        {
                while(WriteAddr<endaddr)//写数据
                {
                        if(FLASH_ProgramWord(WriteAddr,*pBuffer)!=FLASH_COMPLETE)//写入数据
                        {
                                break;        //写入异常
                        }
                        WriteAddr+=4;
                        pBuffer++;
                }
        }
  FLASH_DataCacheCmd(ENABLE);        //FLASH擦除结束,开启数据缓存
        FLASH_Lock();//上锁
}
这个程序是https://blog.csdn.net/xiaogu0322/article/details/78593423里的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
cht-rtos
1楼-- · 2019-12-10 23:05
代码手机没法看,建议说明一下自己具体如何操作的,怎么影响的
蚁族
2楼-- · 2019-12-10 23:11
覆盖是什么样的
zqf441775525
3楼-- · 2019-12-11 04:46
407的Flash块好像是128K吧,写flash之前先要整块擦除。一般不用407的flash存储数据,对RAM缓存要求很高。
陶新成
4楼-- · 2019-12-11 08:08
 精彩回答 2  元偷偷看……
1a2b3c
5楼-- · 2019-12-11 08:11
既然前面又没问题,那按你这样说肯定问题就出在后面读出在写入了,那么简单看就是你读出时候添加新的内容给覆盖了呗,还有啥问题

一周热门 更多>