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 程序运行时的数据(变量、栈、堆) ✔ 丢
相关推荐
传感器与混合集成电路5 小时前
210℃与175℃高温存储器选型研究:LHM256MB与LDMF4GA-H架构与可靠性对比(上)
嵌入式硬件·能源
17(无规则自律)6 小时前
【CSAPP 读书笔记】第二章:信息的表示和处理
linux·嵌入式硬件·考研·高考
Hello_Embed7 小时前
libmodbus 移植 STM32(基础篇)
笔记·stm32·单片机·学习·modbus
qq_397562318 小时前
QT工程 , 生成别的电脑运行的exe程序
嵌入式硬件·qt
qqssss121dfd9 小时前
STM32H750XBH6的ETH模块移植LWIP
网络·stm32·嵌入式硬件
想放学的刺客11 小时前
单片机嵌入式试题(第27期)设计可移植、可配置的外设驱动框架的关键要点
c语言·stm32·单片机·嵌入式硬件·物联网
李永奉11 小时前
杰理芯片SDK开发-ENC双麦降噪配置/调试教程
人工智能·单片机·嵌入式硬件·物联网·语音识别
BackCatK Chen11 小时前
第 1 篇:软件视角扫盲|TMC2240 软件核心特性 + 学习路径(附工具清单)
c语言·stm32·单片机·学习·电机驱动·保姆级教程·tmc2240
兆龙电子单片机设计11 小时前
【STM32项目开源】STM32单片机多功能电子秤
stm32·单片机·开源·毕业设计·智能家居
wotaifuzao12 小时前
STM32多协议网关-FreeRTOS事件驱动架构实战
stm32·嵌入式硬件·can·freertos·uart·modbus·spi