Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录
- Keil 中设置 STM32 Flash 和 RAM 地址详解
- 一、Flash 和 RAM 配置界面(Target 选项卡)
- 1. IROM1(用于配置 Flash)
- 2. IRAM1(用于配置 RAM)
- 二、链接器设置界面(Linker 选项卡)
- 1. 勾选“Use Memory Layout from Target Dialog”
- 2. 查看链接器参数(如果没有勾选上面选项)
- 三、常见问题与注意事项
- 四、小结
Keil 中设置 STM32 Flash 和 RAM 地址详解
在使用 Keil 开发 STM32 项目时,正确配置 Flash(程序存储器)和 RAM(数据存储器)地址是确保程序能够正常编译、烧录和运行的关键步骤。本文将以 STM32F103ZE 为例,介绍如何在 Keil 中配置 Flash 和 RAM 的起始地址及大小,并解释链接器参数的含义。
一、Flash 和 RAM 配置界面(Target 选项卡)
在 Keil 中打开工程后,依次点击:
Project -> Options for Target '目标名' -> Target
在 Target 选项卡中,我们可以看到如下两个关键部分:
1. IROM1(用于配置 Flash)
- Start:
0x08000000
- Size:
0x80000
(512KB)
这是 STM32F103ZE 芯片内部 Flash 的默认起始地址和大小。程序的代码和常量数据将被链接到该区域,并烧录进 Flash。
2. IRAM1(用于配置 RAM)
- Start:
0x20000000
- Size:
0x10000
(64KB)
这是 STM32F103ZE 芯片的内部 SRAM 地址。运行时使用的堆栈、全局变量、静态变量等都分配在该区域。
这些设置必须与芯片实际的内存结构匹配,错误的配置会导致编译通过但运行失败,甚至无法烧录。
二、链接器设置界面(Linker 选项卡)
继续在工程设置中,进入:
Project -> Options for Target '目标名' -> Linker
1. 勾选“Use Memory Layout from Target Dialog”
确保链接器使用的是 Target 页中配置的 Flash 和 RAM 地址,而不是手动提供的 .sct
文件。
2. 查看链接器参数(如果没有勾选上面选项)
也可以不勾选“Use Memory Layout”,而改为手动指定参数。在此情况下,Keil 会使用命令行参数传递地址信息,例如:
--cpu Cortex-M3 --ro-base 0x08000000 --rw-base 0x20000000 --entry Reset_Handler --first __Vectors
各参数含义如下:
--cpu Cortex-M3
:目标处理器核心类型--ro-base 0x08000000
:只读区域(代码段)的起始地址,即 Flash 地址--rw-base 0x20000000
:读写区域(数据段)的起始地址,即 RAM 地址--entry Reset_Handler
:程序的入口函数,一般由启动文件中定义--first __Vectors
:将中断向量表放在链接映像的最前面,确保中断能正确工作
三、常见问题与注意事项
-
Flash 和 RAM 地址必须匹配实际芯片
不同型号 STM32 芯片的 Flash 和 RAM 容量不同,设置时应参考芯片的数据手册。 -
IROM 和 IRAM 区间不能重叠
IROM 和 IRAM 是程序的存储区域与运行区域,不能配置成交叉或相互重叠,否则程序运行不稳定。 -
程序入口地址应为
0x08000000
或Reset_Handler
这样才能确保程序上电后从正确位置开始执行。 -
使用 STM32CubeMX 配合 Keil 可自动生成正确的链接设置
CubeMX 会自动根据所选芯片型号为你生成启动文件和链接配置,能有效减少出错率。
四、小结
存储区域 | 起始地址 | 大小 | 用途 |
---|---|---|---|
Flash | 0x08000000 | 512KB | 存储程序代码和常量 |
RAM | 0x20000000 | 64KB | 运行时变量与堆栈 |
通过 Keil 的 Target 和 Linker 两个设置页面,开发者可以灵活配置代码和数据的存放位置。掌握这些配置不仅有助于正确使用芯片资源,还能在调试和分析程序问题时提供清晰的内存视图。