【STM32】详解嵌入式中FLASH闪存的特性和代码示例

一、存储器

我们正常编译生成的二进制文件,需要下载烧录到单片机里面去,这个文件保存在单片机的ROM(read only memory)中,所有可以完成这种特性的存储介质都可以称为ROM。
分类
ROM一般分为四大类
①PROM:可编程只读存储器,只可擦写一次。例如:芯片的全球唯一ID码
②EPROM:可擦除可编程只读存储器,一旦编程完成后,EPROM只能用强紫外线照射来擦除。
③EEPROM:带电可擦可编程只读存储器,是一种掉电后数据不丢失的存储芯片。
④FLASH:可以擦写多次,按扇区/块擦除。
我们一般使用的单片机里面使用的是EEPROM,STM32则使用的是FLASH。

编程:是指将数据写入到存储器。
在这里插入图片描述

二、FLASH(闪存)

如果从电擦除这个特性上说的话,FLASH也是EEPROM的一种,不同的是,FLASH的擦除区块不是一个字节,而是扇区来擦除,也是因为这样的特性,才导致FLASH价格比EEPROM便宜。
在这里插入图片描述
闪存,是一种长寿命的非易失性(在断电情况下仍然保持所存储的数据信息)的存储器。应用:SD卡、固态硬盘、芯片内存存储单元存储代码。
在这里插入图片描述
FLASH的作用:

  • 存储程序代码
  • 存储小图片、音频
  • 存储密码、自定义数据

FLASH如何写入数据?
前提条件:当前写入数据的地址一定要被擦除过,才能被写入。
如果要修改写入的数据,是怎么做的呢?
单独修改某个字节会失败的,需要这么做:

  • 先保存整个扇区的所有数据
  • 针对保存的数据进行修改
  • 擦除该扇区
  • 将修改后的数据全部写入到该扇区
    在这里插入图片描述

三、示例代码

	printf("this is flash test\r\n");
	__IO uint32_t *d;
	
	/* 解锁FLASH(闪存)*/
	FLASH_Unlock();
	
	/* 擦除扇区4 */
	if(FLASH_EraseSector(FLASH_Sector_4, VoltageRange_3) != FLASH_COMPLETE)
	{
		printf("FLASH_EraseSector error\r\n");
		while(1);
	}
	
	/* 向扇区4首地址写入0x12345678 */
	if(FLASH_ProgramWord(0x8010000,0x12345678)!= FLASH_COMPLETE)
	{
		printf("FLASH_ProgramWord error\r\n");
		while(1);		
		
	}
	
	/* 不再需要修改数据,则锁定闪存 */
	FLASH_Lock(); 
	
	//读取数据
	d = *(__IO uint32_t*)0x8010000;
	printf("read addr at 0x8010000 is 0x%08x\r\n", d);

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

老K聊技术

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

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

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

打赏作者

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

抵扣说明:

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

余额充值