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();