2、Keil MDK 环境搭建:从安装到工程模板
Keil MDK,说白了就是 ARM 单片机开发的事实标准。我入行那会儿用的还是 Keil 4,现在都到 Keil 6 了。但不管版本怎么变,安装、注册、装 Pack、建模板这四步,是绕不开的基本功。这一章,我就带你把这四步走一遍。
2.1 安装与注册:别让 License 卡住你
安装本身没什么难度,但有几个细节,我建议你留意一下。
2.1.1 安装步骤
- 下载安装包:去 Keil 官网(www.keil.com)下载 MDK-ARM 最新版。注意区分版本,别下成 C51 了。
- 以管理员身份运行:右键安装包,选“以管理员身份运行”。这一步很多人会忘,但如果不这样做,后续装 Pack 时可能会报权限错误。
- 一路 Next:安装路径我建议用默认的
C:\Keil_v6,别改到中文目录下。我以前有个同事把路径改成“D:\开发工具\Keil”,结果编译时总报路径错误,折腾了半天。 - 完成安装:安装完成后,桌面会生成 MDK-ARM 图标。先别急着打开,我们先把注册搞定。
2.1.2 注册与 License 管理
Keil MDK 是收费软件,但可以申请免费的评估版 License,限制 32KB 代码大小。对于学习来说,完全够用。
我的建议:如果你只是做个人项目或学习,用评估版 License 就行。但如果是公司项目,一定要买正版。我见过有人用盗版被查,罚款比买 License 贵多了。
注册流程如下:
- 打开 Keil MDK,点击菜单栏 File → License Management。
- 复制 CID(Computer ID)那一串字符。
- 打开浏览器,访问 Keil 官网的 License 申请页面(需要注册账号)。
- 粘贴 CID,选择 MDK-ARM Evaluation,提交后邮箱会收到 License 文件。
- 回到 License Management 窗口,点击 Add License File,选择下载的 License 文件即可。
注意:License 是绑定电脑的。换电脑或重装系统后,需要重新申请。我曾经因为换硬盘,忘了备份 License,结果又折腾了一遍申请流程。
2.2 芯片包(Pack)的安装与管理
Keil MDK 本身不包含芯片支持。你需要安装对应的芯片包(Pack),才能编译和调试特定型号的单片机。
2.2.1 什么是 Pack?
Pack 是 Keil 用来管理芯片支持、驱动库、中间件的一种方式。每个 Pack 对应一个芯片系列,比如 STM32F1 系列、GD32F3 系列。安装后,你才能在 Device 列表里找到对应的芯片。
2.2.2 安装 Pack 的两种方式
| 方式 | 操作步骤 | 适用场景 |
|---|---|---|
| 在线安装 | 点击 Pack Installer 图标,搜索芯片型号,点击 Install | 网络通畅,推荐新手使用 |
| 离线安装 | 从官网下载 .pack 文件,双击安装 | 内网环境,或需要固定版本 |
我个人习惯用离线安装。为什么呢?因为在线安装有时会下载失败,而且版本更新后,旧项目可能不兼容。我一般会在项目开始时,把用到的 Pack 版本固定下来,存到网盘里,方便团队统一。
2.2.3 管理 Pack 版本
在 Pack Installer 里,你可以看到已安装的 Pack 列表。如果某个芯片有多个版本,建议只保留项目需要的版本。多余的版本可以卸载,避免编译时选错。
避坑指南:我曾经在一个项目里,同时装了 STM32F1 的 2.0.0 和 2.3.0 两个版本。结果编译时,Keil 自动选了旧版本,导致某些寄存器定义找不到。排查了半天才发现是 Pack 版本冲突。所以,建议一个项目只保留一个 Pack 版本。
2.3 工程模板的创建与配置
每次新建项目都从头配置,太浪费时间了。我建议你创建一个工程模板,以后直接复制使用。
2.3.1 创建模板的步骤
- 新建项目:点击 Project → New μVision Project,选择保存路径,输入项目名(比如
Template)。 - 选择芯片:在弹出的 Device 对话框中,搜索你的芯片型号(比如 STM32F103C8),点击 OK。
- 添加启动文件:Keil 会提示是否添加启动文件,选 是。这一步会自动添加芯片对应的启动代码和系统初始化文件。
- 配置输出路径:点击 Project → Options for Target,在 Output 选项卡里,把 Select Folder for Objects 设为
.\Output。这样编译生成的 .hex、.axf 文件都会放在 Output 文件夹里,不会污染源码目录。 - 配置调试器:在 Debug 选项卡里,选择你的调试器(比如 ST-Link),点击 Settings,确认 SWD 或 JTAG 接口配置正确。
- 添加用户代码:在项目里新建一个
main.c文件,写一个空的主函数框架。以后每次新建项目,直接在这个模板上改。
2.3.2 模板目录结构建议
一个好的模板,目录结构应该清晰。我常用的结构如下:
Template/
├── Output/ # 编译输出文件
├── User/ # 用户代码(main.c、中断处理等)
├── Drivers/ # 外设驱动库(HAL/LL 库)
├── Startup/ # 启动文件(由 Keil 自动生成)
└── Project.uvprojx # 项目文件
我的习惯:我会把模板压缩成 .zip 文件,存到云盘里。每次新项目,直接解压、改名、打开就能用。省去了重复配置的时间。
2.3.3 配置优化选项
在 Options for Target → C/C++ 选项卡里,有几个关键配置:
- Optimization:调试阶段选
Level 0 (-O0),发布阶段选Level 2 (-O2)或Level 3 (-O3)。 - One ELF Section per Function:勾选后,每个函数会生成独立的段,方便链接器优化。我建议默认勾选。
- Language C:选
C99或C11,别用老旧的 C89。
2.4 知识体系总览
下面这张图,把 Keil MDK 环境搭建的核心逻辑串起来了。你可以对照着看,心里有个谱。
2.5 常见问题与避坑
- 编译报错 "Error: L6406E":一般是芯片选错了,或者 Pack 没装对。检查 Device 列表里是不是你用的型号。
- 调试器连不上:先检查驱动是否安装,再检查接线(SWD 只需要 SWDIO、SWCLK、GND 三根线)。我遇到过好几次,都是因为杜邦线接触不良。
- 下载后程序不运行:检查启动文件是否正确,或者复位电路是否有问题。有时候是 Boot0 引脚电平没拉低。
重要提醒:每次重装系统或换电脑后,记得重新申请 License 并安装 Pack。我建议把 License 文件和常用 Pack 版本都备份到网盘里,省得临时抓瞎。
好了,Keil MDK 的环境搭建就讲到这里。你跟着走一遍,应该就能顺利跑起来。记住,模板一定要建,后面会省很多事。