打印
[STM32F1]

STM32F103的FLASH读写操作

[复制链接]
4432|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));
}



使用特权

评论回复
5
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));否则就是对同一地址反复编程而发生编程错误。

使用特权

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

本版积分规则

427

主题

1175

帖子

3

粉丝