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

嵌入式单片机开发 - Keil MDK 编译与烧录程序

Keil MDK 编译程序

1、Keil MDK 编译按钮
  1. Build 按钮:重新编译整个工程的所有源文件,无论它们是否被修改过
  1. Rebuild 按钮:仅编译修改过的文件及其依赖项,未修改的文件直接使用之前的编译结果
2、Keil MDK 编译结果
linking...
Program Size: Code=1340 RO-data=336 RW-data=12 ZI-data=1324  
FromELF: creating hex file...
"..\..\Output\atk_f103.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:01
  • 这是 Keil MDK 编译成功后的输出信息,表明程序已经顺利通过编译并生成了目标文件
linking...
  • 编译完成后进入链接(Linking)阶段,将所有的 .o 目标文件、库文件合并成最终的可执行文件,例如,.axf.hex
Program Size: Code=1340 RO-data=336 RW-data=12 ZI-data=1324  
  • 程序在内存中的占用情况,分为 4 个部分
  1. Code=1340:代码段(1340 字节),存放程序代码,例如,函数、指令

  2. RO-data=336:只读数据段(336 字节),存放常量,例如,const 变量、字符串常量

  3. RW-data=12:读写数据段(12 字节),存放已初始化的全局 / 静态变量,需在运行时从 Flash 加载到 RAM

  4. ZI-data=1324:零初始化数据段(1324 字节),存放未初始化的全局 / 静态变量,运行时由启动代码初始化为 0

  • 关键公式如下
  1. Flash 占用 = Code + RO-data + RW-data

  2. RAM 占用 = RW-data + ZI-data

FromELF: creating hex file...
  • 将生成的 .axf 文件(ELF 格式)转换为烧录文件(例如,.hex.bin),用于下载到单片机 Flash 中
"..\..\Output\atk_f103.axf" - 0 Error(s), 0 Warning(s).
  • 编译结果如下
  1. ..\..\Output\atk_f103.axf:输出文件路径

  2. 0 Error(s):错误统计,0 表示编译完全通过,无致命问题

  3. 0 Warning(s):警告统计,0 表示代码规范良好

Build Time Elapsed: 00:00:01
  • 本次编译耗时,耗时短说明工程较小或仅触发了部分编译

Keil MDK 烧录程序

  1. 这里使用 ST-LINK 调试编程工具来烧录程序

  2. ST-LINK 主要用于 STM32 系列 ARM Cortex-M 微控制器的开发

  3. ST-LINK 支持烧录程序、在线调试、擦除等功能

1、基础配置
  1. 点击 【Options for Target】
  1. 点击 【Debug】 -> 选择 【ST-Link Debugger】 -> 勾选 【Load Application at Startup】 -> 勾选 【Run to main()】
  1. 点击 【Utilities】 -> 勾选 【Use Debug Driver】
  1. 点击 【Setting】
  1. 选择 【ST-LINK/V2】 -> 选择 【SW】 -> 在 【SW Device】 中查看设备识别结果
2、下载算法配置
  1. 点击 【Options for Target】
  1. 点击 【Utilities】 -> 点击 【Setting】
  1. 勾选并选择下载算法(算法需要根据实际设备选择)
3、烧录程序
  1. 点击 【Download】
  1. 出现烧录结果
Load "..\\..\\Output\\atk_f103.axf" 
Erase Done.
Programming Done.
Verify OK.
Application running ...
Flash Load finished at 12:41:49
4、烧录结果解读
Load "..\\..\\Output\\atk_f103.axf"
  1. 加载 Keil MDK 生成的 可执行文件
Erase Done.
  1. 设备的 Flash 存储区已被擦除,确保旧程序不会残留影响新程序
Programming Done.
  1. 程序已成功写入设备的 Flash 存储器
Verify OK.
  1. 验证 Flash 中的数据与 .axf 文件一致,无校验错误
Application running ...
  1. 程序已自动运行
Flash Load finished at 12:41:49
  1. 烧录过程完成的时间戳,整个流程无报错

补充学习

1、下载算法
  1. 下载算法是用于将程序烧录到设备 Flash 存储器中的关键组件

  2. 下载算法定义了如何擦除、编程、校验 Flash 的内容

  3. 下载算法是一个小型程序,通常由设备厂商或 IDE 提供

2、调试编程工具与下载算法
  • ST-LINK 等调试编程工具在烧录程序时,依赖下载算法来完成对设备 Flash 的擦除、编程、校验操作
  1. ST-LINK 等调试编程工具是搬运工,负责与设备通信并加载算法

  2. 下载算法是操作手册,告诉设备如何进行操作

  • 要根据不同的设备,选择不同调试编程工具和下载算法
http://www.xdnf.cn/news/530.html

相关文章:

  • c++中的类有关概念
  • 精益数据分析(6/126):深入理解精益分析的核心要点
  • 五分钟学会如何基本使用JJWT!!!
  • Java虚拟机面试题:垃圾收集(下)
  • 3.基础开发工具
  • CLIP赋能视频分析:时空侧网络调优,行人属性识别效率革命
  • Java—— 常见API介绍 第二期
  • C++/Python实现RGB和HSI相互转换
  • Linux——firewalld防火墙(笔记)
  • 深度学习语音识别
  • bat脚本转换为EXE应用程序文件
  • 案例驱动的 IT 团队管理:创新与突破之路:第六章 组织进化:从案例沉淀到管理体系-6.1 案例库建设方法论-6.1.2案例分级与标签体系
  • OpenStack Yoga版安装笔记(23)Swift安装
  • QML中的3D功能--模型导入与修改
  • LRU Java实现
  • 五、小白如何用Pygame制作一款跑酷类游戏(主角跳跃和滑行动作的实现)
  • Linux | I.MX6ULL 使用 Yocto 文件系统开发 QT
  • 015-C语言字符函数和字符串函数
  • java蓝桥杯b组
  • 大模型Rag - 两大检索技术
  • 【滑动窗口】最⼤连续 1 的个数 III(medium)
  • 【java实现+4种变体完整例子】排序算法中【桶排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • 大数据平台简介
  • 掌握 MySQL:从命令行操作到数据类型与字段管理
  • 论文阅读:2025 arxiv AI Alignment: A Comprehensive Survey
  • Zookeeper的通知机制是什么?
  • 【更新完毕】2025妈妈杯C题 mathercup数学建模挑战赛C题数学建模思路代码文章教学:音频文件的高质量读写与去噪优化
  • xilinx fpga中pll与mmcm的区别
  • 【DT】USB通讯失败记录
  • MySQL 全局锁:全量备份数据要怎么操作?