打印
[应用相关]

stm32的Flash

[复制链接]
491|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
FireRiver9|  楼主 | 2016-3-21 20:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
页擦除
     主存储块的任何一页都可以通过FPEC的页擦除功能擦除。 建议使用以下步骤进行页擦除:
1.检查FLASH_SR寄存器的BSY位。以确认没有其他正在进行的闪存操作。必须等待BSY位为0,才能继续操作。
2.设置FLASH_CR寄存器的PER位为1。选择页擦除操作。
3.设置FLASH_AR寄存器为要擦除页所在地址,选择要擦除的页。FLASH_AR的值在哪一页范围内,就表示要擦除哪一页。
4.设置FLASH_CR寄存器的STRT位为1,启动擦除操作。
5.等待FLASH_SR寄存器的BSY位变为0,表示操作完成。
6.查询FLASH_SR寄存器的EOP位,EOP为1时,表示操作成功。   
7.读出被擦除的页并做验证。擦完后所有数据位都为1。

整片擦除
     整片擦除功能擦除整个主存储块,信息块不受此操作影响。 建议使用以下步骤进行整片擦除:
1.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作。
2.设置FLASH_CR寄存器的MER位为1。选择整片擦除操作。   
3.设置FLASH_CR寄存器的STRT位为1。启动整片擦除操作。   
4.等待FLASH_SR寄存器的BSY位变为0,表示操作完成。
5.查询FLASH_SR寄存器的EOP位,EOP为1时,表示操作成功。   
6.读出所有页并做验证。擦完后所有数据位都为1。

主存储块的编程
     对主存储块编程每次可以写入16位。当FLASH_CR寄存器的PG位为1时,在一个闪存地址写入一个半字(16位)将启动一次编程;写入任何非半字的数据,FPEC都会产生总线错误。在编程过程中(BSY位为1时),任何读写闪存的操作都会使CPU暂停,直到此次闪存编程结束。 建议使用如下步骤对主存储块进行编:
1.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作。  
2.设置FLASH_CR寄存器的PG位为1。选择编程操作。  
3.在指定的地址写入要编程的半字。直接用指针写。
4.等待FLASH_SR寄存器的BSY位变为0,表示操作完成。
5.查询FLASH_SR寄存器的EOP位,EOP为1时,表示操作成功。
6.读出写入的地址并验证数据。
沙发
尤彼卡| | 2016-3-21 20:29 | 只看该作者
如果没有擦除就进行编程,会出现什么结果?

使用特权

评论回复
板凳
可可球| | 2016-3-21 20:53 | 只看该作者
STM32在执行编程操作前,会先检查要编程的地址是否被擦除,如果没有,则不进行编程

使用特权

评论回复
地板
豆腐块| | 2016-3-21 21:42 | 只看该作者
FLASH编程手册上说进行闪存操作(擦除或编程)时,必须打开内部的RC振荡器(HSI),是不是一定要用HIS进行闪存的擦除及编程操作?

使用特权

评论回复
5
lefeng| | 2016-3-21 22:02 | 只看该作者
进行闪存操作时,必须要保证HIS没有被关闭,但是操作时的系统仍然可以是HSE时钟

使用特权

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

本版积分规则

74

主题

673

帖子

0

粉丝