基本信息
文件名称:STMicroelectronics 系列:STM32F103 (适用于简单游戏设备)_(15).物理存储与内存管理.docx
文件大小:27.61 KB
总页数:34 页
更新时间:2025-06-16
总字数:约1.76万字
文档摘要

PAGE1

PAGE1

物理存储与内存管理

在嵌入式系统中,物理存储和内存管理是至关重要的部分。STM32F103单片机提供了多种存储器类型,包括闪存(Flash)、随机存取存储器(RAM)和外设存储器(PeripheralRegisters)。了解这些存储器的特性和管理方法对于开发高效、可靠的游戏设备至关重要。

1.闪存(Flash)

1.1闪存概述

闪存是STM32F103单片机中用于存储程序代码和常量数据的非易失性存储器。它具有较高的访问速度和较低的功耗,但写入和擦除速度较慢。闪存的大小取决于具体型号,常见的有128KB、256KB等。

1.2闪存的读写操作

1.2.1读操作

闪存的读操作相对简单,直接通过地址访问即可。以下是一个简单的读操作示例:

//读取闪存中的某个地址的数据

uint32_treadFlashData(uint32_taddress){

return*(__IOuint32_t*)address;

}

intmain(){

uint32_tdata=readFlashData(0;//读取闪存起始地址的数据

//使用读取的数据

return0;

}

1.2.2写操作

闪存的写操作需要一些特殊的步骤,因为闪存需要先擦除才能写入。以下是一个简单的写操作示例:

#includestm32f10x.h

//擦除闪存中的某个扇区

voideraseFlashSector(uint32_tsectorAddress){

FLASH_Unlock();//解锁闪存以允许擦除和写入

FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGERR);//清除所有闪存标志

//擦除扇区

FLASH_Statusstatus=FLASH_EraseSector(sectorAddress,VoltageRange_3);//假设使用3.3V电压范围

if(status!=FLASH_COMPLETE){

//擦除失败,处理错误

}

FLASH_Lock();//锁定闪存

}

//写入闪存中的某个地址的数据

voidwriteFlashData(uint32_taddress,uint32_tdata){

FLASH_Unlock();//解锁闪存以允许擦除和写入

FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGERR);//清除所有闪存标志

//写入数据

FLASH_Statusstatus=FLASH_ProgramWord(address,data);

if(status!=FLASH_COMPLETE){

//写入失败,处理错误

}

FLASH_Lock();//锁定闪存

}

intmain(){

uint32_tdata=0

uint32_tsectorAddress=0//假设扇区起始地址为0

uint32_taddress=0//假设要写入的数据地址为0

eraseFlashSector(sectorAddress);//先擦除扇区

writeFlashData(address,data);//写入数据

return0;

}

1.3闪存保护

为了防止意外的写入和擦除操作,STM32F103提供了闪存保护功能。可以通过设置写保护(WriteProtection)和读保护(ReadProtection)来实现。

1.3.1写保护

#includestm32f10x.h

voidsetWriteProtection(uint32_tsector){

FLASH_Unlock();//解锁闪存以允许擦除和写入

FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGERR);//清除所有闪存标志