背景:
STM32中存储区分为:随机存取存储器RAM和只读存储器ROM。
其中:
RAM为常说的内存,比如手机的2G内存4G内存等,就是程序跑起来的时候所占用的存储空间,特点是掉电数据丢失。
ROM为常说的硬盘,比如手机的64G和128G等,可以简单的理解为硬盘的存储空间,特点是掉电数据不丢失,所以又叫“非易失性存储器件”。ROM又包含:EEPROM和flash。
写Flash区操作流程:
1、确定要写入flash区域的首地址
2、对解锁flash
3、对falsh进行操作
4、对flash进行上锁
Flash容量
Flash根据容量大小可以分为以下三种:
1、小容量产品:Flash大小为1-32KB(STM32F10X_LD)
2、中容量产品:Flash大小为64-128KB(STM32F10X_MD)
3、大容量产品:Flash大小为256KB以上(STM32F10X_HD)
应用:
将单片机未使用部分的flash来存储数据,以达到掉电保存数据的作用相当于EEPROM。这里的话主要是代码的实现STM32CubeMx不用去配置,但是需要注意RAM地址,不可以地址溢出,写入Flash区域的操作如下:
/* address 可以不需要 只需要配置起始地址*/
默认配置成0x08010000即可
SN为ROM地址
void writeFlash(uint32_t address)
{
uint16_t i=0;
uint32_t data;
startaddress=SN;
endaddress=SN+4;
HAL_FLASH_Unlock();
FLASH_EraseInitTypeDef f;
f.TypeErase=FLASH_TYPEERASE_PAGES;
f.PageAddress=address;
f.NbPages=1;
uint32_t PageError=0;
HAL_FLASHEx_Erase(&f,&PageError);
while(startaddress<endaddress)
{
if(HAL_FLASH_Program(TYPEPROGRAM_WORD ,startaddress,Data)==HAL_OK)
{
startaddress+=4;
}
}
HAL_FLASH_Lock();
}
读取Flash区:
/*读取内存数据*/
uint32_t readFlash(uint32_t address)
{
uint32_t myinfor=*(__IO uint32_t*)(address);
return myinfor;
}
相关下载:https://download.csdn.net/download/wanxiweilai/84079533
本文介绍了STM32中的存储区划分,包括RAM和ROM,重点讲解了如何进行Flash的写入和读取操作。通过示例代码展示了如何在STM32CubeMx配置之外进行Flash操作,强调了防止RAM地址溢出的重要性,并提供了读写函数的实现。此外,还提及了Flash容量的分类以及其在存储数据方面的作用。

284

被折叠的 条评论
为什么被折叠?



