MCU__Flash区域操作

本文介绍了STM32中的存储区划分,包括RAM和ROM,重点讲解了如何进行Flash的写入和读取操作。通过示例代码展示了如何在STM32CubeMx配置之外进行Flash操作,强调了防止RAM地址溢出的重要性,并提供了读写函数的实现。此外,还提及了Flash容量的分类以及其在存储数据方面的作用。

背景:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工控匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值