当前位置: 首页 > web >正文

stm32FLASH RAM 详解说明

ROM

Read-Only Memory 只读存储器,固化内容,不易更改 存放固定程序或启动信息(如Bootloader)

RAM Random Access Memory 易失性存储器,断电即失 程序运行时的数据区

SRAM

Static RAM 静态 RAM,速度快,成本高 STM32 中的主 RAM 一般是 SRAM

DRAM

Dynamic RAM 动态 RAM,需不断刷新 通常用于 PC,不常见于 STM32

Flash

Flash Memory 非易失性存储器,可擦除写入 存储用户程序和常量数据

STM32 中内存的划分

在 STM32 微控制器中,最常见的内存结构包括:

1. Flash Memory(闪存)

类型:非易失性存储器(断电不丢失)
特点:只能擦除整页(页大小和芯片有关)
作用:
存储用户程序代码(.text)
存储常量(const)
存储配置信息、表格数据等(可使用 Flash 擦写库函数读写)
地址范围示例(STM32F103C8T6):
0x08000000 ~ 0x0801FFFF (128 KB)

2. SRAM(内部 RAM)

类型:易失性静态 RAM(掉电丢失)
作用:
存储程序运行时的数据,如:
全局变量(.data)
堆栈(stack)
动态分配(malloc)
用于中断服务、临时缓冲等
地址范围示例(STM32F103C8T6):
0x20000000 ~ 0x20004FFF (20 KB)

3. ROM(实际上是 Flash 的一部分)

一般指芯片出厂时烧录的系统 Bootloader(IAP)
对用户不可写
可以用于 DFU 模式或串口下载

4. 外部 RAM / 外部 Flash(选配)

通过 FSMC/QSPI 连接的外部扩展存储器=
用于需要大量内存的应用(如图像缓存、音频、FS)

三、编译后代码的内存分区(段)

段名 存储位置 内容
.text Flash 程序代码、 常量
.data RAM (SRAM) 已初始化的全局变量
.bss RAM (SRAM) 未初始化的全局/静态变量
stack RAM 栈空间(局部变量、函数调用)
heap RAM 动态内存(malloc/free)

四、常见问题解答

1️⃣ ROM 和 Flash 有什么区别?
ROM 是概念上的分类:指“只读存储器”。
Flash 是实现方式的一种:一种可擦写的非易失性 ROM,STM32 中用作主 ROM。
2️⃣ SRAM 和 RAM 是一回事吗?
RAM 是统称,包括 SRAM 和 DRAM;
STM32 使用的是 SRAM,比 DRAM 快且不需要刷新。
3️⃣ Flash 可以写吗?
可以,但速度慢、寿命有限(支持数万次擦写)
通常用于存放程序或较少更新的数据,如配置项
4️⃣ 堆区和栈区存在哪里?
都在 RAM(SRAM)中,栈从高地址往下增长,堆从低地址往上增长

五、STM32 存储器结构图

STM32F103C8T6

+-----------------------+ 0x08000000
|     Flash 存储器      |
|     (程序代码)        |
+-----------------------+
|       空间或保留      |
+-----------------------+ 0x20000000
|      SRAM(RAM)      |
| .data, .bss, heap, stack |
+-----------------------+
|  外设寄存器、系统区域  |
+-----------------------+ 0xE0000000

F405RGT6

0x00000000  -->  起始地址(映射区域,可配置为 Flash 或 SRAM)
0x08000000  -->  Flash(1MB)
0x10000000  -->  CCM RAM(64KB)
0x20000000  -->  SRAM1 + SRAM2(共128KB)
0x40000000  -->  外设寄存器
0x1FFF0000  -->  系统 BootROM(30KB)
http://www.xdnf.cn/news/17005.html

相关文章:

  • Vue 3.0 Composition API:重新定义组件逻辑的组织方式
  • 解决mac在安装nvm过程中可能遇到的一些问题
  • nodejs读写文件
  • 自动驾驶中的传感器技术14——Camera(5)
  • AI Agent开发学习系列 - LangGraph(7): 带有条件判断的Conditional Graph
  • L1、L2正则化的几何解释
  • Redis 通用命令
  • Git、Gitee、GitHub、GitLab完整讲解:从基础到进阶
  • 【BTC】挖矿
  • 编程与数学 03-002 计算机网络 19_网络新技术研究
  • Android 15 中禁用/启用应用的系统级方法
  • GaussDB 约束的使用举例
  • 机器人学中路径规划(Path Planning)和轨迹生成(Trajectory Generation)关系
  • 小智服务器Java安装编译(xinnan-tech)版
  • 麦肯锡咨询公司PEI经典面试题目汇总
  • gbase8s 常见表约束介绍
  • 18-C语言:第19天笔记
  • 知识随记-----Qt 实战教程:使用 QNetworkAccessManager 发送 HTTP POST
  • Ubuntu系统VScode实现opencv(c++)图像翻转和旋转
  • Java语言核心特性全解析:从面向对象到跨平台原理
  • 【学习笔记】Java并发编程的艺术——第1章 并发编程的挑战
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第三天(JavaScript)
  • Maven - 并行安全无重复打包构建原理揭秘
  • sqli-labs通关笔记-第28a关GET字符注入(关键字过滤绕过 手注法)
  • 如何设置主机IP地址
  • 用纳米AI一键生成Python屏幕监控软件
  • Python编程基础与实践:Python循环结构基础
  • 【图像处理基石】用Python实现基础滤镜效果
  • QPainter::CompositionMode解析
  • 智能学号抽取系统V5.6.4重磅发布