在"ROM就是程序存储器,实际的存储介质是Flash闪存"这句话中,"程序存储器 "是从功能用途的角度来定义的。
简单来说,它是微控制器中专门用来长期存放代码(程序)的地方。
以下是详细解读:
1. 核心含义:它是程序的"家"
- 存放什么 ?
你写的C语言代码,经过编译后生成的机器码(0和1组成的指令序列),以及程序中定义的常量(如固定的查找表、字符串文本),都存放在这里。 - 谁来读 ?
当STM32上电启动时,CPU(内核)做的第一件事,就是从这个"程序存储器"的起始地址开始,一条一条地读取指令,然后执行。 - 为什么叫"程序"存储器 ?
因为它的主要任务就是存储让芯片动起来的"逻辑"和"规则"。如果没有它,芯片就是一堆硅,不知道该怎么工作。
2. 关键特性:非易失性(Non-Volatile)
这是"程序存储器"最本质的特征,也是它区别于"运行内存 (RAM)"的关键:
- 断电不丢失 :当你给STM32断电,或者拔掉USB线,存放在这里的程序依然存在。
- 下次上电继续跑:当你再次通电,CPU依然能从里面读出原来的程序,设备会像上次一样工作。
对比 RAM:
- RAM(运行内存):像黑板,断电(擦除)后内容全没了,适合存临时变量。
- ROM/程序存储器:像刻在石头上的字,断电后字还在,适合存永久性的程序代码。
3. 为什么实际介质是 Flash(闪存)
虽然历史上真正的 ROM (Read-Only Memory,只读存储器) 是出厂就写好、永远不能改的(比如老式游戏卡带),但在现代微控制器(如STM32)中,我们需要一种既能长期保存 ,又能在开发时反复修改的存储器。
- Flash 的优势 :
- 非易失性:满足"程序存储器"断电不丢数据的要求。
- 可擦写:开发者可以通过下载器(如ST-Link)把新编译的程序反复写入(烧录)进去,覆盖旧程序。这比传统的掩膜ROM灵活得多。
- 成本低、密度高:适合存储较大的程序代码(STM32F103通常有64KB~512KB不等的Flash)。
因此,在现代嵌入式语境下,大家习惯把存放程序的Flash区域统称为"ROM"或"程序存储器",尽管物理上它是Flash。
4. 形象类比: cookbook(食谱书)
如果把微控制器比作一个厨房:
- CPU (内核) 是 厨师。
- RAM (运行内存) 是 案板/碗:厨师在这里切菜、混合调料(处理临时数据),做完菜或下班(断电)后,案板会被清空。
- 程序存储器 (ROM/Flash) 是 食谱书 :
- 里面写着详细的做菜步骤(程序代码)。
- 即使厨房关灯了(断电),食谱书里的字也不会消失。
- 第二天开灯(上电),厨师拿起食谱书,从第一页开始照着做。
- 如果菜式要更新(程序升级),你可以用橡皮擦掉旧步骤,写上新的(Flash的可擦写特性)。
5. 总结
"程序存储器"的意思就是:
- 功能上 :它是专门用来存储用户编写的代码的地方。
- 行为上 :它是CPU启动后读取指令的源头。
- 特性上 :它必须具有断电保存的能力(非易失性)。
- 实现上 :在STM32中,这个功能是由Flash闪存芯片单元来具体承担的。
没有程序存储器,微控制器就失去了灵魂,无法执行任何任务。