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

简介: 【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);


结果:

相关文章
|
6月前
|
物联网 开发者 智能硬件
STM32:引领嵌入式系统新时代的微控制器
STM32:引领嵌入式系统新时代的微控制器
|
6月前
【STM32】基于HAL库的360度编码器、摇杆代码编写
【STM32】基于HAL库的360度编码器、摇杆代码编写
|
4月前
|
内存技术
STM32CubeMX flash的使用
STM32CubeMX flash的使用
182 10
|
5月前
|
Web App开发 传感器 Linux
【嵌入式软件工程师面经】STM32单片机
【嵌入式软件工程师面经】STM32单片机
143 1
【STM32】详解独立看门狗的本质和使用步骤&代码
【STM32】详解独立看门狗的本质和使用步骤&代码
|
5月前
|
传感器 数据格式
【STM32】DHT11温湿度模块传感器详解&代码
【STM32】DHT11温湿度模块传感器详解&代码
|
6月前
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
|
6月前
|
传感器
STM32循迹小车原理介绍和代码示例
STM32循迹小车原理介绍和代码示例
|
6月前
STM32控制SG90舵机原理及代码
STM32控制SG90舵机原理及代码
183 1
|
6月前
stm32f4外设学习篇(代码集合)(三)
stm32f4外设学习篇(代码集合)
120 0