打印
[STM32F1]

stm32 读内部flash

[复制链接]
1033|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lhb292|  楼主 | 2014-7-8 09:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想读取stm32的flash的内容,
s16 FLASHRead(vu32* address,u8 *flashdata,u16 len)//lenΪËĵı¶Êý
{       
        u32 data=0,i=0;
        if(len%4!=0) return Err_Lenth;
        FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);//Çå³ýһЩ±êÖ¾
  for(i=0;i<len/4;i++)
        {
                data=(*(vu32*)(address+i));//
                flashdata[i*4]  =(u8)data;
                flashdata[(i*4)+1]=(u8)(data>>8);
                flashdata[(i*4)+2]=(u8)(data>>16);
                flashdata[(i*4)+3]=(u8)(data>>24);
        }
  return (i*4);
}
这样读出来的是正确的数据,但是不应该是这样吗?
data=(*(vu32*)(address+i*4));//

为什么是+1,而不是+4啊?
沙发
mmuuss586| | 2014-7-8 12:55 | 只看该作者
data=(*(vu32*)(address+i*4));//
你这样也可以,你可以看下官方的例程
  while (Address < FLASH_USER_END_ADDR)
  {
    data32 = *(__IO uint32_t*)Address;

    if (data32 != DATA_32)
    {
      MemoryProgramStatus++;  
    }

    Address = Address + 4;
  }

使用特权

评论回复
板凳
lhb292|  楼主 | 2014-7-9 16:03 | 只看该作者
mmuuss586 发表于 2014-7-8 12:55
data=(*(vu32*)(address+i*4));//
你这样也可以,你可以看下官方的例程
  while (Address < FLASH_USER_END ...

data=(*(vu32*)(address+i*4));
i=1;时
读出的数据并不是address+4中的数据,而是address+16中的数据
而如果是data=(*(vu32*)(address+i));读出是的数据是address+4的数据,
很不解?

使用特权

评论回复
地板
lhb292|  楼主 | 2014-7-9 16:09 | 只看该作者
mmuuss586 发表于 2014-7-8 12:55
data=(*(vu32*)(address+i*4));//
你这样也可以,你可以看下官方的例程
  while (Address < FLASH_USER_END ...

今天又出现一个问题,如果stm32被读保护了,然后用Jlink直接擦除,然后芯片就完了,解除读保护,和擦除下载什么的都不能用了,请问这个问题该怎么解决,这是第二次遇到这个问题。

使用特权

评论回复
5
lhb292|  楼主 | 2014-7-11 09:18 | 只看该作者
找到问题所在了,应该是s16 FLASHRead(u32 address,u8 *flashdata,u16 len)//

使用特权

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

本版积分规则

3

主题

10

帖子

0

粉丝