【学习笔记】stm32单片机flash

江协的 stm32 教程的最后一期是教我们用 flash 存储（其实这之后还有 can 通信，他单独拿出来了）

（一）什么是 flash

Flash 存储器（FLASH EEPROM）又称闪存，快闪。它是 EEPROM 的一种。它结合了 ROM 和 RAM 的长处。不仅具备电子可擦除可编辑（EEPROM）的性能，还不会断电丢失数据同时可以快速读取数据。它于 EEPROM 的最大区别是，FLASH 按扇区（block）操作，而 EEPROM 按照字节操作。FLASH 的电路结构较简单，同样容量占芯片面积较小，成本自然比 EEPROM 低，因此适合用于做程序存储器。

STM32F1 系列的 FLASH 包含程序存储器、系统存储器和选项字节三个部分，通过闪存存储器接口（外设）可以对程序存储器和选项字节进行擦除和编程。

读写 FLASH 的用途：
利用程序存储器的剩余空间来保存掉电不丢失的用户数据。
通过在程序中编程（IAP），实现程序的自我更新。

在线编程（In-Circuit Programming – ICP）用于更新程序存储器的全部内容，它通过 JTAG、SWD 协议或系统加载程序（Bootloader）下载程序。
在程序中编程（In-Application Programming – IAP）可以使用微控制器支持的任一种通信接口下载程序。

（二）flash 模块组织

stm32 的 flash 模块分为：主储存器（存储代码部分）、信息快（存储启动程序和选项字节部分）、以及接口寄存器（链接外设部分）。

（三）flash 结构

flash 结构图如下：

（四）代码部分

是的，我们直接快进到了代码部分，为什么呢？虽然 flash 的使用要更改不少的寄存器，但标准库已经帮我们封装好了，只要简单调用即可。

值得注意的是，在写入前必须要先擦除，否则无法修改。
以及，我们的数据存储地址需要放在末尾，不然会跟程序代码冲突。

那么，flash 的学习笔记就这么多，偷个懒就这样了，接着我去学学 pcb 布线就搞个项目玩玩。