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 程序运行时的数据(变量、栈、堆) ✔ 丢
相关推荐
en.en..25 分钟前
STM32(F429)启动模式与两种烧录方式
stm32·单片机·嵌入式硬件
Zw-awa26 分钟前
从 printf 到曲线:把数据送上 VOFA+
stm32
单片机仿真设计1 小时前
基于 51 单片机的数字温度计(DS18B20+LCD1602+Proteus 仿真,支持阈值可调声光报警)
单片机·嵌入式硬件·proteus·课设
芝士爱沙拉1 小时前
原生内置agent智能开发能力的MCU IDE-MounRiver Studio
ide·单片机·嵌入式硬件
路上有只喵1 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇4
单片机·嵌入式硬件
YYRAN_ZZU1 小时前
FlameGraph 火焰图介绍和使用
linux·嵌入式硬件
【 STM32开发 】2 小时前
【CubeMX+STM32】SD卡 文件系统读写 FatFs+SDIO+DMA (F103版本)
stm32·单片机·嵌入式硬件·1024程序员节
动词ing3 小时前
【51单片机】独立按键控制LED灯亮灭
单片机·嵌入式硬件·51单片机
Industio_触觉智能3 小时前
瑞芯微工业ADC采集实战-上|AD7616&RK3506 FlexBus高速并行采集落地
嵌入式硬件·硬件架构·硬件工程·adc·瑞芯微·rk3506·flexbus
女神下凡3 小时前
芯参谋(79):嵌入式学习进阶_(硬件与软件)深入实践指南
arm开发·单片机·嵌入式硬件·学习·fpga开发·设计规范