[STM32F1] STM32F103的FLASH读写操作

[复制链接]
4660|4
 楼主| yzzly 发表于 2016-4-29 17:57 | 显示全部楼层 |阅读模式
操作函数:
void FlashPageWrite(Uint32 PageNumber,Uint32 *SourceBuf)
{
        Uint08 Cnt,Sta;
        Uint32 Address=0x08000000 + PageNumber * 2 * 1024;
        FLASH_Unlock();
        FlashPageErase(Address);
        for(Cnt=0;Cnt<10;Cnt++)*(SourceBuf+Cnt)=0x55AA55AA;
        for(Cnt=0;Cnt<10;Cnt++)
        {
                Sta=FLASH_ProgramWord(Address+Cnt,*(SourceBuf+Cnt));
        }
}

FLASH_ProgramWord(Address+Cnt,*(SourceBuf+Cnt));第一次调用正常,也写进去了(通过存储器窗口看),第二次调用时就重启了,什么道理?
wahahaheihei 发表于 2016-4-29 20:17 | 显示全部楼层
FLASH_Unlock();
是不是因为这个,你写完后缺少一个锁定,而第二次你又去解锁,而当时是没有锁的。
迪卡 发表于 2016-4-29 22:05 | 显示全部楼层
写flash,先解锁,写完再上锁
 楼主| yzzly 发表于 2016-4-30 20:48 | 显示全部楼层
本帖最后由 yzzly 于 2016-4-30 20:52 编辑

我还没写完,这个循环就执行不下去,只是第一次调用写函数正常,下一次调用CPU就复位了                                                                                                                                                                 for(Cnt=0;Cnt<10;Cnt++)
{
      Sta=FLASH_ProgramWord(Address+Cnt,*(SourceBuf+Cnt));
}



 楼主| yzzly 发表于 2016-5-3 11:15 | 显示全部楼层
本帖最后由 yzzly 于 2016-5-3 11:49 编辑

找到原因了,FLASH_ProgramWord(Address+Cnt,*(SourceBuf+Cnt));的地址Address+Cnt的Cnt要乘以4,即FLASH_ProgramWord(Address+Cnt,*(SourceBuf+Cnt*4));否则就是对同一地址反复编程而发生编程错误。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

428

主题

1194

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部