STM32的Flash和SRAM

1、存储器

存储器分为易失性和非易失性。

  • 易失性:掉电数据会丢失,通常指RAM;

RAM分为SRAM、DRAM

  • SRAM:静态RAM,只要上电数据就不会丢失;
  • DRAM:动态RAM,需要每隔一段时间刷新数据,否则数据会丢失;
  • 非易失性:掉电数据仍然可以保存,通常指ROM;
  1. 最初的ROM只读或可写一次然后只读;
  2. 后来,发展出电可擦除即EEPROM,从此“ROM只读存储器”只是名义上的只读,实际就是可读可写。EEPROM可对指定字节进入擦除写入。
  3. 再后来,FLASH闪存出现了,以块为单位擦除,使得存储的数据密度更高,成本更低;

        FLASH分为Nor FLASH和Nand FLASH:Nor FLASH可以以字节为单位读取,Nand FLASH是以块为单位读取数据;

2、STM32的存储器

2.1、FLASH

2.1.1、STM32的FLASH类型——Nor FLASH

FLASH分为Nor FLASH和Nand FLASH,Nor Flash的数据线和地址线是分开的,Nand FLASH的数据线和地址线是共用的。

这就导致了Nand FLASH存放代码的话,CPU指令译码后无法直接执行,所以STM32的FLASH指的是Nor FLASH;如果要用Nand FLASH存放代码的话,还要有一块Nor FLASH或RAM,用于加载程序执行;

2.1.2、FLASH的结构——STM32F4中文参考手册

STM32的Flash和SRAM_第1张图片

2.2、SRAM

STM32的Flash和SRAM_第2张图片

3、代码和数据存放的区域

  • CODE:指程序中代码即函数体的大小,含未使用的函数;
  • RO_DATA:Read Only只读,const常量和字符串常量;
  • RW_DATA:Read Write,已初始化的、可读可写的全局变量和静态变量;
  • ZI_DATA:未初始化的可读可写全局/静态变量【=0也被认为是未初始化】,堆、栈;

存放在Flash中:BIN文件 = CODE+RO_DATA+RW_DATA 

存放在SRAM中:所有的变量 = RW_DATA+ZI_DATA

注意,RW_DATA出现了两次,在程序未执行的时候是在Flash中的,程序执行的时候会加载到SRAM当中;

你可能感兴趣的:(STM8/STM32,stm32)