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

F4内部flash读出全部为0

[复制链接]
mthgh0818 提问时间:2015-8-10 16:09 /
我根据官方例程修改的,测试时全部写入20,但读出来为0,应该是写入进去了。查了几遍没查到错误,麻烦帮我看一眼。

void FLASH_Eraser()
{
         /* Clear pending flags (if any) */  
        FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |
                      FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);

        /* Get the number of the start and end sectors */
        StartSector = GetSector(FLASH_USER_START_ADDR);
        EndSector = GetSector(FLASH_USER_END_ADDR);

        for (SectorCounter = StartSector; SectorCounter < EndSector; SectorCounter += 8)
        {
        /* Device voltage range supposed to be [2.7V to 3.6V], the operation will
           be done by word */
                if (FLASH_EraseSector(SectorCounter, VoltageRange_3) != FLASH_COMPLETE)
                {
                  /* Error occurred while sector erase.
                     User can add here some code to deal with this error  */
                        while (1);
                }
        }
}


void FLASH_Write(aCm *Buf)
{
         tPriint32                Value=20;
//         float *         Ptr=(float*)Buf;
       
         FLASH_Unlock();
         FLASH_Eraser();
        Address = FLASH_USER_START_ADDR;
       

        while (Address < FLASH_USER_END_ADDR)
        {
               
                if (FLASH_ProgramWord(Address,Value) == FLASH_COMPLETE)
                {
                        Address = Address + 4;
                }
                else
                {
                        while (1);
                }
        }
        FLASH_Lock();
}



tPriint32  data32=5;
void FLASH_Read(aCm *Buf)
{
        tPriint32 *Ptr=(tPriint32*)Buf;
         Address = FLASH_USER_START_ADDR;

        while (Address < FLASH_USER_END_ADDR)
        {
                data32 = *(__IO uint32_t*)Address;
                Address = Address + 4;
         }  
}

程序写入时没有停在while(1)处,说明已经写入进去了,但不知道为什么读出来是0
收藏 评论7 发布时间:2015-8-10 16:09

举报

7个回答
你好我好大家好! 回答时间:2015-8-10 18:38:46
帮顶                        
yanhaijian 回答时间:2015-8-11 09:09:19
我建议你用JLINK把FLASH整体读出了再看看擦写的地方是否改写了。
茅坑的石头 回答时间:2015-8-11 10:13:14
具体没细看,但是本人做过类似的实验,不是用的u32,每次只读u8,
char* ptr = NULL
ptr = ADD_START
循环体
printf(%x\n, *ptr);
ptr++;
这是基本思路,你可以参考参考
mthgh0818 回答时间:2015-8-11 13:24:39
yanhaijian 发表于 2015-8-11 09:09
我建议你用JLINK把FLASH整体读出了再看看擦写的地方是否改写了。

请教一下,用JLINK把FLASH整体读出来是什么意思?我说的读出全部为0,就是debug下读取到的
yanhaijian 回答时间:2015-8-11 13:52:43
mthgh0818 发表于 2015-8-11 13:24
请教一下,用JLINK把FLASH整体读出来是什么意思?我说的读出全部为0,就是debug下读取到的 ...

不是我不愿回答这个问题,你对这一块了解的太少,我无从回答起。但我还是简单的说两句。你软件擦写FLASH,你自己是知道FLASH哪个地址的数据发生改变,打开SEGGER软件,点击target菜单里面的read back里面的entire chip。读出F4的FLASH里面所有内容,你在找到文件中相应位置对比一下看看值有没有改变。
废鱼 回答时间:2015-8-11 16:32:19
如果没有写成功直接读取出来的是0xFFFFFFFF,读取的时候一定要是双字或者字的,不可以读取奇数地址。
mthgh0818 回答时间:2015-8-11 17:25:02
yanhaijian 发表于 2015-8-11 13:52
不是我不愿回答这个问题,你对这一块了解的太少,我无从回答起。但我还是简单的说两句。你软件擦写FLASH ...

十分感谢。我试一下

所属标签

相似问题

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