目录
[1.0 闪存模块组织](#1.0 闪存模块组织)
[2.0 Flash基本结构](#2.0 Flash基本结构)
[3.0 Flash解锁](#3.0 Flash解锁)
[4.0 指针访问存储器地址](#4.0 指针访问存储器地址)
[5.0 程序存储器编程](#5.0 程序存储器编程)
[6.0 选项字节](#6.0 选项字节)
[7.0 选项字节编程](#7.0 选项字节编程)
[8.0 选项字节擦除](#8.0 选项字节擦除)
[9.0 电子签名](#9.0 电子签名)
[10.0 手册解读](#10.0 手册解读)
定义:
STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程
读写FLASH的用途:利用程序存储器的剩余空间来保存掉电不丢失的用户数据 通过在程序中编程(IAP),实现程序的自我更新
在线编程(In-Circuit Programming -- ICP)用于更新程序存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载程序
在程序中编程(In-Application Programming -- IAP)可以使用微控制器支持的任一种通信接口下载程序

1.0 闪存模块组织

2.0 Flash基本结构

3.0 Flash解锁

4.0 指针访问存储器地址
指针访问存储器地址需要解引用:在C语言中解引用表示的就是取值的意思

5.0 程序存储器编程
注:在单片机中有字节,半字,一字的说法,字节表示的是8个bit位,半节表示的是uint16_t,一个字节表示的是uint32_t个字节。



6.0 选项字节

7.0 选项字节编程
检查FLASH_SR的BSY位,以确认没有其他正在进行的编程操作
解锁FLASH_CR的OPTWRE位
设置FLASH_CR的OPTPG位为1
写入要编程的半字到指定的地址
等待BSY位变为0 读出写入的地址并验证数据

8.0 选项字节擦除
检查FLASH_SR的BSY位,以确认没有其他正在进行的闪存操作
解锁FLASH_CR的OPTWRE位
设置FLASH_CR的OPTER位为1
设置FLASH_CR的STRT位为1
等待BSY位变为0 读出被擦除的选择字节并做验证

9.0 电子签名

10.0 手册解读
......