打印
[STM32F1]

请问,STM32F103内部flash存储数据受限的问题

[复制链接]
1657|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近在调试STM32F103内部flash,测试发现,当我写100组16位数据放在flash里,然后读取正常,放200组读取不正常。这个大概是有什么原因造成的?代码如下
write_adr:写入的地址为偶数,我用255页的首地址:0x807f800
buf:  待写入的数据
len:  写入的数据长度
FLASH_WRITE_STA FLASH_WRITE_more_halfword(uint32_t write_adr, uint16_t* buf, uint16_t len)
{
          volatile uint8_t i = 0;
          FLASH_Status sta;
       
          if (write_adr < 0x0807f800 || write_adr > 0x0807ffff)     //限制在255页
                  return WRITE_FAIL;
               
          if (len > ((2*1024) / 2))  //最大写入1K
                         len = 1024;
       
          FLASH_Unlock();            //解锁,方可擦除
          FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);//清标志位
       
          sta = FLASH_ErasePage(0x0807f800); //擦除255页
          if (FLASH_COMPLETE != sta)         
        {
                          FLASH_Lock();
                          return WRITE_FAIL;
        }
               
        for (i=0; i<len; i++)              //写入数据
        {     
                sta = FLASH_ProgramHalfWord(write_adr, buf[i]);
                 if (FLASH_COMPLETE != sta)
                {
                                FLASH_Lock();
                                return WRITE_FAIL;
                }  
                               
                write_adr += 2;               //16位数据,地址加2
        }

        FLASH_Lock();                     //上锁
        return WRITE_OK;
               
}

void FLASH_READ_more_halfword(uint32_t read_adr, uint16_t* buf, uint16_t len)
{
                volatile uint8_t i = 0;
       
                for (i=0; i<len; i++)
                {
                          buf[i] = *((__IO uint16_t*)read_adr); //读数据
                          read_adr += 2;  
                }

}

沙发
捉虫天师| | 2016-3-30 13:12 | 只看该作者
是出界了吗,空间够不够,先读出来试试看,看后面的有没有

使用特权

评论回复
板凳
motor666| | 2016-3-30 14:12 | 只看该作者
最近也在弄这个。是不是写入的数据与程序在地址上有重叠?怎么保证不会把数据写到程序地址里去。

使用特权

评论回复
地板
lgq1542380129|  楼主 | 2016-3-30 14:18 | 只看该作者
捉虫天师 发表于 2016-3-30 13:12
是出界了吗,空间够不够,先读出来试试看,看后面的有没有

出街应该不会,当时读取没有成功。估计在哪里死循环了。回头我跟踪下看看。

使用特权

评论回复
5
lgq1542380129|  楼主 | 2016-3-30 14:24 | 只看该作者
motor666 发表于 2016-3-30 14:12
最近也在弄这个。是不是写入的数据与程序在地址上有重叠?怎么保证不会把数据写到程序地址里去。 ...

我把最后一页最为数据存储。实际上我就存储一个16位数据。我把设置的最大偏移量设置为0X7F7FF。程序在flash中的存储应该是连续的。我的程序代码量几十K。

捕获.JPG (7.6 KB )

捕获.JPG

使用特权

评论回复
6
捉虫天师| | 2016-4-9 22:54 | 只看该作者
从来没有动过这些东西,真佩服你们这些高手

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

401

帖子

6

粉丝