Flash 是什么?SRAM 是什么?它们的作用、特点、区别、在 STM32 中如何使用?

Flash 是什么?SRAM 是什么?它们的作用、特点、区别、在 STM32 中如何使用?


1. Flash 是什么?

Flash = 闪存(非易失性存储器)

→ 断电后内容不会丢失

→ 在 STM32 里主要存 程序代码 + 常量数据

Flash 的主要作用

  1. 保存程序代码(.text)

    • 你写的 C 语言生成的机器码,就存放在 Flash。
  2. 保存常量(const 变量)

    • 编译期已确定的常量也会放入 Flash。
  3. 保存用户数据(如配置)

    • 如果你需要保存参数(如 wifi 密码、配置信息),可以手动写入 Flash(擦写)。
  4. Bootloader / 应用区分存放


Flash 的特点

特性 Flash
是否掉电消失 ❌ 不会
读取速度 中等
写入方式 必须"先擦再写"
擦写粒度 页(Page)或扇区(Sector)
寿命 有限(约 1万 次擦写)
用途 保存程序和长期数据

闪存结构例子(STM32F4)

以 STM32F439ZIY6S 为例(你的项目有用到):

  • Flash 总容量:2MB

  • 分成多个 Sector(扇区)

  • 程序一般写在 Sector 0 开始


🧩 Flash 在 STM32 程序中的使用方式

一般你不用手动操作 Flash:

  • Keil / GCC 链接脚本自动把程序写到 Flash。

  • 烧录程序时,ST-Link/JLink 就会把编译好的 bin/hex 烧到 Flash。

手动写入 Flash 的典型场景:

例如保存 WiFi 密码、ID 信息时,你会:

  1. 解锁 Flash(HAL_FLASH_Unlock)

  2. 擦除一个扇区

  3. 写入数据(HAL_FLASH_Program)

  4. 上锁 Flash


2. SRAM 是什么?

SRAM = 静态随机存储器(易失性)

断电就丢数据

→ MCU运行过程中用于存放变量、堆栈、全局数据、运行时临时数据


SRAM 的主要作用

  1. 存放全局变量、静态变量(.data区)

  2. 存放未初始化全局变量(.bss区)

  3. 存放程序运行时的临时变量(栈 Stack)

  4. 存放动态分配的内存(堆 Heap)

    • malloc/new 分配的内存都在 SRAM

SRAM 特点

特性 SRAM
是否掉电消失 ✔ 会
读取速度 非常快
写入速度 非常快
擦写需求 不需要(直接写)
用途 程序运行时数据

SRAM 大小例子(你给的芯片)

● STM32F439ZIY6S
  • 256KB SRAM

  • 有 TCM(高速 RAM),可作为数据缓存

● STM32F103VET6
  • 64KB SRAM

⚠️ SRAM 比 Flash 少得多,所以你要小心使用内存,尤其是大数组、动态内存。


🆚 Flash 与 SRAM 的对比总结

比较项 Flash(程序存储) SRAM(运行内存)
断电后数据 ❌ 保存 ✔ 丢失
速度
作用 存代码、常量、配置 存变量、栈、堆
擦写方式 需"擦除扇区"后写 随写随用
典型大小 几百 KB ~ 几 MB 几十 KB ~ 几百 KB
使用方式 烧录程序进去 运行时自动分配

直观理解举例

假设你写程序控制一个智能手环:

Flash:

  • 手环固件代码

  • 提示语句:"Hello GearFit"

  • 保存的蓝牙配对 ID

  • 用户设置(亮度、语言)

SRAM:

  • 程序运行的局部变量

  • 接收缓冲区

  • 计算用的临时变量

  • 显示数据缓存(帧缓存)


🔧 实际使用示例(STM32 中)

Flash 布局

复制代码
0x08000000       ← 程序代码(Text)
0x080xxxxxx       ← 常量数据(const)
0x080FC000       ← 用户数据(参数存储区)

SRAM 布局

复制代码
0x20000000       ← 全局变量(.data)
0x2000xxxx       ← 未初始化变量(.bss)
0x2001xxxx       ← 堆 (malloc/new)
0x2002xxxx       ← 栈(stack)

📌 小结(10 秒理解版本)

名称 作用 是否掉电丢失
Flash 放程序、配置、常量 ❌ 不丢
SRAM 程序运行时的数据(变量、栈、堆) ✔ 丢
相关推荐
zcmodeltech2 小时前
智慧城市沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的园区-城市-数字孪生联动方案
服务器·数据库·人工智能·stm32·嵌入式硬件·信息可视化·智慧城市
Run_Teenage2 小时前
嵌入式:认识STM32命名方法和引脚定义,认识仿真器
stm32·单片机·嵌入式硬件
lhbweilai3 小时前
STM32 时钟源&时钟树(hal库)
stm32·单片机·嵌入式硬件
lhbweilai15 小时前
STM32 ADC模拟数字转换(hal库)
stm32·单片机·嵌入式硬件
坏柠15 小时前
通信协议入门:单片机怎样把一个数字发送出去?
单片机·嵌入式硬件
小僧景贤17 小时前
STM32 工程文件深度解析(Keil‑MDK + STM32CubeIDE)
stm32·单片机·stm32cubeide
国科安芯18 小时前
低轨卫星姿态与轨道控制系统中高可靠MCU的选型研究——基于AS32S601的抗辐照性能试验数据分析
分布式·科技·单片机·嵌入式硬件·系统架构
zcmodeltech21 小时前
工业生产线沙盘模型多段灯带时序控制系统设计:基于STM32与Modbus RTU的连铸-热轧-镀锌全流程联动方案
stm32·单片机·嵌入式硬件·物联网·制造·嵌入式实时数据库·多分类
小僧景贤1 天前
STM32F407 时钟系统超详解
stm32·单片机·嵌入式硬件
西城微科方案开发1 天前
胎压计方案开发
单片机·嵌入式硬件