对内部 FLASH 的写入过程

1. 解锁
由于内部 FLASH 空间主要存储的是应用程序,是非常关键的数据,为了防止误操作
修改了这些内容,芯片复位后默认会给控制寄存器 FLASH_CR 上锁,这个时候不允许设置
FLASH的控制寄存器,从而不能修改 FLASH中的内容。
所以对 FLASH写入数据前,需要先给它解锁。解锁的操作步骤如下:
(1) 往 FPEC键寄存器 FLASH_KEYR 中写入 KEY1 = 0x45670123
(2) 再往 FPEC键寄存器 FLASH_KEYR 中写入 KEY2 = 0xCDEF89AB

2. 页擦除
在写入新的数据前,需要先擦除存储区域,STM32 提供了页(扇区)擦除指令和整个
FLASH擦除(批量擦除)的指令,批量擦除指令仅针对主存储区。
页擦除的过程如下:
(1) 检查 FLASH_SR 寄存器中的“忙碌寄存器位 BSY”,以确认当前未执行任何
Flash 操作;
(2) 在 FLASH_CR 寄存器中,将“激活页擦除寄存器位 PER ”置 1,
(3) 用 FLASH_AR 寄存器选择要擦除的页;
(4) 将 FLASH_CR 寄存器中的“开始擦除寄存器位 STRT ”置 1,开始擦除;
(5) 等待 BSY 位被清零时,表示擦除完成。

3. 写入数据
擦除完毕后即可写入数据,写入数据的过程并不是仅仅使用指针向地址赋值,赋值前
还还需要配置一系列的寄存器,步骤如下:
转 零死角玩转 STM32F103— — 霸道

(1) 检查 FLASH_SR 中的 BSY 位,以确认当前未执行任何其它的内部 Flash 操作;
(2) 将 FLASH_CR 寄存器中的 “激活编程寄存器位 PG” 置 1;
(3) 向指定的 FLASH存储器地址执行数据写入操作,每次只能以 16位的方式写入;
(4) 等待 BSY 位被清零时,表示写入完成。**