【STM32】FLASH闪存

发布时间:2024年01月14日

1?FLASH闪存简介

本节所指STM32内部闪存,即下载程序的时候,程序存储的地方。(非易失性)

STM32F1系列的FLASH包含程序存储器、系统存储器(bootloader,不允许修改)和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程

类型

起始地址

存储器

用途

ROM

0x0800 0000

程序存储器Flash

存储C语言编译后的程序代码

0x1FFF F000

系统存储器

存储BootLoader,用于串口下载

0x1FFF F800

选项字节

存储一些独立于程序代码的配置参数

RAM

0x2000 0000

运行内存SRAM

存储运行过程中的临时变量

0x4000 0000

外设寄存器

存储各个外设的配置参数

0xE000 0000

内核外设寄存器

存储内核各个外设的配置参数

读写FLASH的用途:

????????????????利用程序存储器的剩余空间来保存掉电不丢失的用户数据

????????????????通过在程序中编程(IAP),实现程序的自我更新

在线编程(In-Circuit Programming – ICP)用于更新程序存储器的全部内容,它通过JTAGSWD协议或系统加载程序(Bootloader)下载程序

在程序中编程(In-Application Programming – IAP)可以使用微控制器支持的任一种通信接口下载程序

1.1?闪存模块组织

主存储器:程序存储器;

信息块-》启动程序代码:Bootloader,用于串口下载;

信息块-》用户选择字节:选项字节,存储一些独立参数;

闪存存储器接口寄存器:普通外设。闪存管理员,擦除和编程通过读写这些寄存器来完成。

擦除和写保护都是以页为单位的、写入操作前,必须先进行写使能、每个数据位只能由1改写为0,不能由0改写为1、写入数据前必须先擦除,擦除后,所有数据位变为1、擦除必须按最小擦除单元进行、连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写入、写入操作(包括擦除)结束后,芯片进入忙状态,不响应新的读写操作、直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,但不能在忙状态时读取(同W25Q64)。

页的起始范围:0x0800 0000 ~ 0x0800 03FF。起始以0800/0400/0C00/1000结尾;

位置

1.2?FLASH基本结构

1.2.1?FLASH解锁

FPEC共有三个键值:

????????????????RDPRT键 = 0x000000A5,解除读保护

????????????????KEY1 = 0x45670123

????????????????KEY2 = 0xCDEF89AB

使用键,更能防止误操作

解锁:

????????????????复位后,FPEC被保护,不能写入FLASH_CR,即复位后FLASH是锁着的。

????????????????在FLASH_KEYR先写入KEY1,再写入KEY2,解锁

????????????????错误的操作序列会在下次复位前锁死FPEC和FLASH_CR

加锁:

????????????????设置FLASH_CR中的LOCK位锁住FPECFLASH_CR

1.2.2?使用指针访问存储器

使用指针读指定地址下的存储器:

uint16_t Data = *((__IO uint16_t *)(0x08000000));

使用指针写指定地址下的存储器:

*((__IO uint16_t *)(0x08000000)) = 0x1234;

其中:

#define??? __IO??? volatile

文章来源:https://blog.csdn.net/Zhouzi_heng/article/details/135580794
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。