基本信息
文件名称:STMicroelectronics 系列:STM32F1 系列_(4).STM32F1系列的存储器结构.docx
文件大小:25.09 KB
总页数:20 页
更新时间:2025-06-18
总字数:约1.17万字
文档摘要

PAGE1

PAGE1

STM32F1系列的存储器结构

1.存储器概述

STM32F1系列微控制器基于ARMCortex-M3内核,提供了多种存储器类型,包括闪存(FlashMemory)、随机存取存储器(RAM)、系统存储器(SystemMemory)以及外设存储器(PeripheralMemory)。这些存储器在系统中扮演着不同的角色,理解它们的结构和功能对于高效编程和系统设计至关重要。

2.闪存(FlashMemory)

闪存是STM32F1系列微控制器的主要程序存储器,用于存储用户代码和固定数据。闪存的特点是非易失性,即使在断电后数据也不会丢失。STM32F1系列的闪存容量通常在16KB到512KB之间,具体取决于不同的型号。

2.1闪存组织

闪存通常被划分为多个扇区(Sector),每个扇区的大小可能不同。例如,STM32F103C8T6型号的闪存被划分为16个1KB的扇区和16个4KB的扇区。每个扇区可以独立擦除和编程,这为数据管理和更新提供了便利。

2.2闪存操作

闪存的操作主要包括读取、编程和擦除。这些操作通过STM32F1系列的闪存接口(FlashInterface)进行控制。

2.2.1读取闪存

读取闪存的操作非常简单,可以直接使用指针访问闪存地址。例如,假设闪存地址为0

//读取闪存中的数据

uint32_treadDataFromFlash(uint32_taddress){

return*(__IOuint32_t*)address;//使用指针读取数据

}

//示例

uint32_tdata=readDataFromFlash(0;

2.2.2编程闪存

编程闪存需要使用闪存接口提供的函数。以下是一个示例,展示如何将数据写入闪存:

#includestm32f1xx_hal.h

//编程闪存

HAL_StatusTypeDefprogramFlash(uint32_taddress,uint32_tdata){

HAL_StatusTypeDefstatus;

uint32_t*p=(uint32_t*)address;

//解锁闪存接口

HAL_FLASH_Unlock();

//清除所有闪存错误标志

__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGERR|FLASH_FLAG_OPTVERR);

//编程闪存

status=HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,(uint32_t)p,data);

//锁定闪存接口

HAL_FLASH_Lock();

returnstatus;

}

//示例

uint32_tdataToWrite=0

HAL_StatusTypeDefresult=programFlash(0dataToWrite);

2.2.3擦除闪存

擦除闪存同样需要使用闪存接口提供的函数。以下是一个示例,展示如何擦除一个扇区:

#includestm32f1xx_hal.h

//擦除闪存扇区

HAL_StatusTypeDeferaseFlashSector(uint32_tsectorAddress){

HAL_StatusTypeDefstatus;

FLASH_EraseInitTypeDeferaseInitStruct;

//解锁闪存接口

HAL_FLASH_Unlock();

//清除所有闪存错误标志

__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGERR|FLASH_FLAG_OPTVERR);

//配置擦除结构

eraseInitStruct.TypeErase=FLASH_TYPEERASE_SECTORS;

eraseInitStruct.VoltageRange=FLASH_VOLTAGE_RANGE_3;

eraseInitStruct.Sector=__HAL_FLASH_GET_SECTOR(s