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

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)

  • Start0x08000000
  • Size0x80000(512KB)

这是 STM32F103ZE 芯片内部 Flash 的默认起始地址和大小。程序的代码和常量数据将被链接到该区域,并烧录进 Flash。

2. IRAM1(用于配置 RAM)

  • Start0x20000000
  • Size0x10000(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:将中断向量表放在链接映像的最前面,确保中断能正确工作

三、常见问题与注意事项

  1. Flash 和 RAM 地址必须匹配实际芯片
    不同型号 STM32 芯片的 Flash 和 RAM 容量不同,设置时应参考芯片的数据手册。

  2. IROM 和 IRAM 区间不能重叠
    IROM 和 IRAM 是程序的存储区域与运行区域,不能配置成交叉或相互重叠,否则程序运行不稳定。

  3. 程序入口地址应为 0x08000000Reset_Handler
    这样才能确保程序上电后从正确位置开始执行。

  4. 使用 STM32CubeMX 配合 Keil 可自动生成正确的链接设置
    CubeMX 会自动根据所选芯片型号为你生成启动文件和链接配置,能有效减少出错率。


四、小结

存储区域起始地址大小用途
Flash0x08000000512KB存储程序代码和常量
RAM0x2000000064KB运行时变量与堆栈

通过 Keil 的 Target 和 Linker 两个设置页面,开发者可以灵活配置代码和数据的存放位置。掌握这些配置不仅有助于正确使用芯片资源,还能在调试和分析程序问题时提供清晰的内存视图。


http://www.xdnf.cn/news/12949.html

相关文章:

  • 企业签名.
  • 迁移达梦数据库过程中,如何快速识别需要改写的Mapper SQL方法
  • 英语写作中“每一个”each individual、every individual、every single的用法
  • 国标GB28181设备管理软件EasyGBS楼宇网络视频实时监控系统应用解决方案
  • 条件语句 if语句 + if...else+switch语句+三元运算符
  • XXE漏洞知识
  • 将 VSCode 的快捷键设置为与 IntelliJ IDEA 类似
  • NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地
  • MeshGPT 笔记
  • YOLO 系列模型技术演进:从 YOLOv5 到 YOLOv11 的深度剖析
  • 禁用思科锐捷设备分页功能
  • (Note)基于Pytorch手搓RNN参考
  • 淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
  • MacOS 安装git
  • Unit 1 深度强化学习简介
  • 深度学习-1.神经网络理解
  • 盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
  • 大端序和小端序以及网络字节序的关系
  • 可视化预警:如何让生产风险预警更高效?
  • Vue 模板配置项深度解析
  • leetcode73-矩阵置零
  • MCP笔记:UVX和NPX
  • 体育平台接入足球数据 API:重构用户体验与商业价值的「数字引擎」
  • Elasticsearch中多索引数据合并与Nested嵌套类型操作全解析
  • Python第七周作业
  • 黑盒测试/白盒测试详解
  • 【向量库】Weaviate 搜索与索引技术:从基础概念到性能优化
  • React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?
  • 「混合开发」H5与原生App交互流程方案全面解析
  • SQL Server 手动收缩ldf文件