嵌入式单片机开发 - Keil MDK 编译与烧录程序
Keil MDK 编译程序
1、Keil MDK 编译按钮
- Build 按钮:重新编译整个工程的所有源文件,无论它们是否被修改过

- 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 个部分
-
Code=1340
:代码段(1340 字节),存放程序代码,例如,函数、指令 -
RO-data=336
:只读数据段(336 字节),存放常量,例如,const 变量、字符串常量 -
RW-data=12
:读写数据段(12 字节),存放已初始化的全局 / 静态变量,需在运行时从 Flash 加载到 RAM -
ZI-data=1324
:零初始化数据段(1324 字节),存放未初始化的全局 / 静态变量,运行时由启动代码初始化为 0
- 关键公式如下
-
Flash 占用 = Code + RO-data + RW-data
-
RAM 占用 = RW-data + ZI-data
FromELF: creating hex file...
- 将生成的
.axf
文件(ELF 格式)转换为烧录文件(例如,.hex
、.bin
),用于下载到单片机 Flash 中
"..\..\Output\atk_f103.axf" - 0 Error(s), 0 Warning(s).
- 编译结果如下
-
..\..\Output\atk_f103.axf
:输出文件路径 -
0 Error(s)
:错误统计,0 表示编译完全通过,无致命问题 -
0 Warning(s)
:警告统计,0 表示代码规范良好
Build Time Elapsed: 00:00:01
- 本次编译耗时,耗时短说明工程较小或仅触发了部分编译
Keil MDK 烧录程序
-
这里使用
ST-LINK
调试编程工具来烧录程序 -
ST-LINK
主要用于 STM32 系列 ARM Cortex-M 微控制器的开发 -
ST-LINK
支持烧录程序、在线调试、擦除等功能
1、基础配置
点击 【Options for Target】

点击 【Debug】
->选择 【ST-Link Debugger】
->勾选 【Load Application at Startup】
->勾选 【Run to main()】

点击 【Utilities】
->勾选 【Use Debug Driver】

点击 【Setting】

选择 【ST-LINK/V2】
->选择 【SW】
->在 【SW Device】 中查看设备识别结果

2、下载算法配置
点击 【Options for Target】

点击 【Utilities】
->点击 【Setting】

勾选并选择下载算法(算法需要根据实际设备选择)

3、烧录程序
点击 【Download】

出现烧录结果

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"
- 加载 Keil MDK 生成的 可执行文件
Erase Done.
- 设备的 Flash 存储区已被擦除,确保旧程序不会残留影响新程序
Programming Done.
- 程序已成功写入设备的 Flash 存储器
Verify OK.
- 验证 Flash 中的数据与
.axf
文件一致,无校验错误
Application running ...
- 程序已自动运行
Flash Load finished at 12:41:49
- 烧录过程完成的时间戳,整个流程无报错
补充学习
1、下载算法
-
下载算法是用于将程序烧录到设备 Flash 存储器中的关键组件
-
下载算法定义了如何擦除、编程、校验 Flash 的内容
-
下载算法是一个小型程序,通常由设备厂商或 IDE 提供
2、调试编程工具与下载算法
- ST-LINK 等调试编程工具在烧录程序时,依赖下载算法来完成对设备 Flash 的擦除、编程、校验操作
-
ST-LINK 等调试编程工具是搬运工,负责与设备通信并加载算法
-
下载算法是操作手册,告诉设备如何进行操作
- 要根据不同的设备,选择不同调试编程工具和下载算法