基本信息
文件名称:STMicroelectronics 系列:STM32F4 系列 (高性能)_(12).STM32F4系列闪存与存储管理.docx
文件大小:26.44 KB
总页数:23 页
更新时间:2025-06-14
总字数:约1.23万字
文档摘要

PAGE1

PAGE1

STM32F4系列闪存与存储管理

1.闪存存储器概述

1.1闪存存储器的结构和特点

STM32F4系列单片机的闪存存储器是其重要的非易失性存储介质,主要用于存储程序代码和固定数据。闪存存储器具有以下特点:

非易失性:数据在断电后仍然保留。

高速读取:闪存存储器的读取速度非常快,适合运行高性能的应用程序。

写入和擦除操作:闪存存储器支持写入和擦除操作,但这些操作相对读取速度较慢,且有一定的寿命限制。

分块管理:闪存存储器通常被划分成多个块,每个块可以独立进行擦除操作。

STM32F4系列单片机的闪存存储器通常分为两个部分:主存储区和系统存储区。主存储区用于存储用户程序和数据,而系统存储区则包含一些固件和引导加载程序。

1.2闪存存储器的性能参数

闪存存储器的性能参数包括:

容量:不同型号的STM32F4单片机具有不同的闪存容量,常见的有512KB、1MB、2MB等。

访问速度:取决于单片机的时钟频率和闪存配置,通常可以达到60MHz或更高。

擦除和写入时间:擦除一个块通常需要几百毫秒,而写入数据则需要几十微秒。

擦除和写入次数:每个块的擦除和写入次数有一定的限制,通常为10,000次。

1.3闪存存储器的配置

闪存存储器的配置通常通过STM32F4的闪存访问控制寄存器(FLASH_ACR)来进行。这些寄存器控制闪存的访问速度、等待状态和预取功能。

1.3.1闪存访问控制寄存器(FLASH_ACR)

位段|描述|

|——|——|

LATENCY|等待状态数,范围从0到7,对应0到7个等待状态|

PRFTEN|预取功能使能,设置为1时启用预取功能|

ICEN|指令缓存使能,设置为1时启用指令缓存|

DCEN|数据缓存使能,设置为1时启用数据缓存|

ICRST|指令缓存复位,设置为1时复位指令缓存|

DCRST|数据缓存复位,设置为1时复位数据缓存|

1.4闪存存储器的编程

闪存存储器的编程包括读取、写入和擦除操作。STM32F4系列单片机提供了多种编程接口,包括HAL库和标准外设库。

1.4.1读取操作

读取闪存存储器中的数据非常简单,可以直接通过指针访问。

//读取闪存存储器中的数据

uint32_tdata;

data=*(__IOuint32_t*)0//读取地址0的数据

1.4.2写入操作

写入闪存存储器中的数据需要进行一些准备工作,包括使能闪存写入和擦除功能,以及解锁闪存存储器。

#includestm32f4xx_hal.h

//写入闪存存储器中的数据

voidwrite_to_flash(uint32_taddress,uint32_tdata){

//解锁闪存存储器

HAL_FLASH_Unlock();

//使能闪存写入和擦除功能

__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGERR);

HAL_FLASHEx_EnableWriteProtection(FLASH_MEMORIES);

//检查闪存是否准备好

if(HAL_FLASH_GetState()==HAL_FLASH_STATE_READY){

//编程操作

FLASH_EraseInitTypeDeferaseInitStruct;

uint32_tpageError=0;

//配置擦除参数

eraseInitStruct.TypeErase=FLASH_TYPEERASE_PAGES;

eraseInitStruct.PageAddress=address;

eraseInitStruct.NbPages=1;

//擦除页

if(HAL_FLASHEx_Erase(eraseInitStruct,pageError)==HAL_OK){

//写入数据

if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,address,data)==HAL_OK){

//写入成功

HAL_FLASH_Lock();