江协的 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 布线就搞个项目玩玩。