Board logo

标题: 关于STM32的FLASH操作(3) [打印本页]

作者: yuyang911220    时间: 2014-12-27 23:20     标题: 关于STM32的FLASH操作(3)

3. 为什么操作后要读出数据并验证?

STM32在某些特殊情况下(例如FPEC被锁住),可能根本就没有执行所要的操作,仅通过寄存器无法判断操作是否成功。所以,保险起见,操作后都要读出所有数据检查。

4. 等待BSY位为1的时间以多少为合适?

请参考STM32固件库中的数据。

5. FLASH编程手册上说进行闪存操作(擦除或编程)时,必须打开内部的RC振荡器(HSI),是不是一定要用HIS进行闪存的擦除及编程操作?

对于这点,我的理解是,进行闪存操作时,必须要保证HIS没有被关闭,但是操作时的系统仍然可以是HSE时钟。STM32复位后,HIS默认是开的,只要你不为了低功耗去主动关闭它,则用什么时钟都可以进行闪存操作的。我所编的程序也验证了这一点。

选项字节

选项字节用于存储芯片使用者对芯片的配置信息。

目前,所有的STM32101xxSTM32102xxSTM32103xxSTM32105xxSTM32107xx产品,选项字节都是16字节。但是这16字节,每两个字节组成一个正反对,即,字节1是字节0的反码,字节3是字节2的反码,...,字节15是字节14的反码,所以,芯片使用者只要设置8个字节就行了,另外8个字节系统自动填充为反码。因此,有时候,也说STM32的选项字节是8个字节,但是占了16字节的空间。

选项字节的8字节正码概述如下:

RDP                    字节0。读保护字节,存储对主存储块的读保护设置。

USER           字节2。用户字节,配置看门狗、停机、待机。

Data0           字节4。数据字节0,由芯片使用者自由使用。

Data1           字节6。数据字节1,由芯片使用者自由使用。

WRP0          字节8。写保护字节0,存储对主存储块的写保护设置。

WRP1          字节10。写保护字节1,存储对主存储块的写保护设置。

WRP2          字节12。写保护字节2,存储对主存储块的写保护设置。

WRP3          字节14。写保护字节3,存储对主存储块的写保护设置。3

选项字节写使能

FLASH­_CR中,有一个OPTWRE位,该位为0时,不允许进行选项字节操作(擦除、编程)。这称为选项字节写使能。只有该位为1时,才能进行选项字节操作。

该位不能软件置1,但可以软件清零。只有向FLASH_OPTKEYR依次写入KEY1KEY2后,硬件会自动对该位置1,此时,才允许选项字节操作。这称为解锁(打开)选项字节写使能。

该位为1后,可以由软件清零,关闭写使能。

复位后,该位为0。错误操作不会永远关闭写使能,只要写入正确的键序列,则又可以打开写使能。写使能已打开时,再次打开,不会出错,并且依然是打开的。

很显然,进行选项字节操作前,先要解开闪存锁,然后打开选项字节写使能,之后,才能进行选项字节操作。

选项字节擦除

建议使用如下步骤对选项字节进行擦除:

       1.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作。

       2解锁FLASH_CR寄存器的OPTWRE位。即,打开写使能。

       3.设置FLASH_CR寄存器的OPTER位为1。选择选项字节擦除操作。

       4.设置FLASH_CR寄存器的STRT位为1

       5等待FLASH_SR寄存器的BSY位变为0,表示操作完成。

       6.查询FLASH_SR寄存器的EOP位,EOP1时,表示操作成功。

7.读出选项字节并验证数据。

由于选项字节只有16字节,因此,擦除时是整个选项字节都被擦除了。






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0