打印
[STM32F0]

关于Flash的操作

[复制链接]
741|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
viseng|  楼主 | 2017-6-13 15:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于Flash的操作,有几个问题需要请教下:
问题1.写半字操作,如下是利用库函数
void Flash_Write(uint32_t Address,uint8_t value)
{
        FLASH_Status status = FLASH_COMPLETE;
   
        assert_param(IS_FLASH_PROGRAM_ADDRESS(Address));
   
        status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
        if(status == FLASH_COMPLETE)
                FLASH_Unlock();
        
        FLASH_ProgramHalfWord(Address,value);
        
        status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
        if(status == FLASH_COMPLETE)
                FLASH_Lock();
}
这里有个问题:看参考手册,Flash会预读下一个待编程字节,是否全为1,如果不是,则自动停止,但我看了一些例程,在半字写入时,并没有这个检查,如果待写入字节非0xFFFF或0x0000,那不是会出错吗?
如果会出错,那该怎么处理?可以进行半字擦除?

问题2.对于多个半字写入
有两种方式:一种就是一个一个的半字写入;
另一种是整页读出,再写入,会对已有的内容做一个检查,看看待写入区域内是否有内容,给出提醒,或者是编程者已知区域内会有内容,做强制写入
这个步聚就是先读出页内容,然后页擦除,然后把待写入内容加入到擦除前读出的缓冲中,最后写入整页。但由于单页有1KB的容量,这个很费内存。

沙发
viseng|  楼主 | 2017-6-13 16:13 | 只看该作者
关于第一个问题,我自已试了下
Flash_WriteHalfWord(USER_FLASH_BASE,0x0000);
Flash_WriteHalfWord((USER_FLASH_BASE+2),0xCCDD);
Flash_WriteHalfWord(USER_FLASH_BASE,0xAAEE);
不管第一句写全零还是非全零,第三句都无法写入成功,全零情况下,调试进入函数,status也是报警信息,这是参考手册有问题吗?

使用特权

评论回复
板凳
viseng|  楼主 | 2017-6-13 16:15 | 只看该作者
如果待写入半字内容非0xFFFF,写入都无法成功,也就是如果是要改变非0xFFFF内容的地址数据,只能进行页擦除,再逐个写入了?

使用特权

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

本版积分规则

44

主题

410

帖子

1

粉丝