零基础学工控:手把手带你从零搭建Keil5开发环境
你是不是也曾在搜索“keil5怎么创建新工程”时,被一堆术语搞得晕头转向?
明明点了“新建工程”,却卡在选芯片、加文件、编译报错的循环里;
好不容易编译通过了,板子却不亮灯——程序根本没跑起来?
别急。这几乎是每个嵌入式新手都会踩的坑。
今天,我们就以一个真实初学者的视角,抛开复杂理论堆砌,用最直白的方式,带你从零开始,完整走通Keil5 开发环境搭建 + 工程创建 + 代码验证的全过程。
无论你是电气自动化、机电一体化的学生,还是转行想进工控行业的工程师,这篇教程都能让你真正“动手做出来”。
为什么是 Keil5?它真的适合工控入门吗?
在工业控制领域,STM32 几乎成了“标配”。从温控仪到PLC模块,从电机驱动器到智能电表,背后都可能藏着一颗 Cortex-M 内核的 MCU。
而围绕这些芯片的开发工具中,Keil MDK(即 Keil5)依然是很多企业、高校和培训机构的首选。
为什么?
- 它稳定、成熟,十几年迭代下来几乎没有崩溃问题;
- 调试功能强大,支持单步执行、变量监视、内存查看;
- 对国产 GD32 等兼容型号支持良好,适配国产化趋势;
- 社区资料极多,“百度一下”就能找到解决方案。
更重要的是:它的工程结构清晰,非常适合初学者理解“代码是如何变成机器动作”的整个流程。
所以,哪怕你现在听不懂“分散加载”、“启动文件”这些词,也没关系。我们一步步来。
第一步:安装 Keil5 —— 别跳过这个关键细节!
下载与安装
- 访问官网: https://www.keil.com/download/product/
- 找到MDK-ARM版本,下载最新版(目前通常是 v5.39 左右)
- 安装时建议关闭杀毒软件(某些安全策略会误删组件)
✅ 小贴士:安装路径尽量不要带中文或空格,比如推荐使用
D:\Keil_v5
激活许可证(License)
安装完成后打开 uVision5,首次运行会提示注册。
你可以选择:
- 使用试用版(30天全功能)
- 或申请免费的 Base 版本(限制代码大小为 32KB,够用!适用于 STM32F103C8T6 这类小容量芯片)
点击菜单栏Help > License Management,复制 CID,去官网申请即可。
⚠️ 注意:很多人装完 Keil 后发现无法编译,其实是忘了激活 License!
第二步:给 Keil “装驱动”—— 添加器件支持包(Pack)
Keil5 本身只是一个框架,真正的“灵魂”在于它能支持哪些芯片。这就靠Device Family Pack (DFP)来实现。
举个例子:你想开发 STM32F103C8T6(蓝丸开发板常用芯片),就得先让 Keil “认识”这块芯片。
怎么做?
- 打开 Keil → 点击菜单栏
Pack Installer - 在左侧搜索栏输入
STMicroelectronics - 展开后找到
STM32F1 Series,点击右侧的Install按钮 - 等待下载完成(可能需要几分钟)
✅ 成功标志:安装完成后,你会看到绿色对勾 ✔️
💡 提示:除了 ST,NXP、GD、Infineon 等厂商也都提供了官方 Pack,国产 GD32 的支持也越来越完善。
第三步:核心操作来了——keil5 怎么创建新工程?
这才是最关键的一步。很多人失败就败在这里。
我们一步一步拆解,不跳任何细节。
1. 新建工程
- 打开 Keil →
Project > New uVision Project - 选择保存位置,例如:
D:\MyProjects\LED_Blink - 输入工程名,如
Blink.uvprojx - 点击保存
此时会弹出一个窗口:“Select Device for Target ‘Target 1’”
2. 选择目标芯片
- 在搜索框中输入你的 MCU 型号,比如
STM32F103C8 - 从列表中选择正确的型号(通常选 STMicroelectronics 那一项)
- 双击确认
❗重要提醒:必须选准型号!选错可能导致寄存器地址错乱,引发 HardFault 异常!
3. 是否添加启动文件?
接下来会弹出提示:“Copy Standard Startup Code to Project Folder and Add File to Project?”
意思是:“要不要自动把启动文件复制到工程目录并加入项目?”
👉一定要点“是”(Yes)
否则你就得手动去找startup_stm32f103xb.s这种汇编文件,非常麻烦。
🔍 启动文件是啥?简单说,它是程序启动的第一站,负责初始化堆栈、设置中断向量表、调用 SystemInit 和 main 函数。没有它,main() 根本不会被执行!
4. 查看工程结构
现在回到主界面左侧的Project 窗口,你应该能看到类似这样的结构:
Blink └─ Target 1 ├─ Source Group 1 │ └─ startup_stm32f103xb.s恭喜!你已经成功迈出了第一步。
第四步:组织你的工程结构 —— 别再把所有文件扔一起了
很多初学者喜欢直接在Source Group 1里写代码,结果越往后越乱。
我们要学会“分组管理”。
右键点击Source Group 1→Add Group...,创建以下分组:
| 分组名 | 用途说明 |
|---|---|
| Src | 存放.c源文件(如 main.c) |
| Inc | 存放.h头文件 |
| Driver | 外设驱动文件(如 uart.c, timer.c) |
| CMSIS | 核心库(可选) |
| HAL | 如果用 HAL 库,放这里 |
然后右键各分组 →Add Existing Files to Group...把你需要的文件加进去。
比如我们现在新建一个main.c文件,放在Src组里。
第五步:配置编译与输出选项 —— 让程序能烧进芯片
这是最容易被忽略但又极其关键的一步。
点击菜单栏Project > Options for Target 'Target 1'(或者按快捷键Alt + F7)
1. Output 标签页
- ✅ 勾选Create HEX File
- 这是你将来烧录程序要用的文件格式
不勾选的话,即使编译成功也不会生成
.hex设置输出路径(默认即可,也可自定义)
2. Debug 标签页
- 选择调试器类型,比如:
- ST-Link Debugger(如果你用的是 ST-Link)
- J-Link/J-Trace Cortex
DAP-Link(常见于国产仿真器)
点击右侧的 Settings,进入调试设置界面
3. Utilities 标签页
- ✅ 勾选Use Debug Driver
- 点击Manage Project Items,确保已包含 Flash 编程算法
- 例如:
STM32F103xB Flash(大小为 128KB)
⚠️ 如果没设置这个,下载时会报错:“No Algorithm Found”
第六步:写一段最简单的测试代码 —— 让 LED 闪起来!
现在我们来验证整个工程是否正常。
新建一个main.c文件,内容如下:
#include "stm32f1xx.h" // 芯片级头文件(由HAL库提供) // 简单延时函数 void delay(volatile uint32_t count) { while(count--); } int main(void) { // 使能 GPIOC 时钟(对应RCC寄存器) RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // 配置 PC13 为推挽输出模式(通用输出模式,50MHz) GPIOC->CRH &= ~GPIO_CRH_MODE13; // 清除模式位 GPIOC->CRH |= GPIO_CRH_MODE13_1; // 输出速度50MHz GPIOC->CRH &= ~GPIO_CRH_CNF13; // 推挽输出模式 while (1) { GPIOC->BSRR = GPIO_BSRR_BR13; // 拉低 PC13(点亮LED) delay(1000000); GPIOC->BSRR = GPIO_BSRR_BS13; // 拉高 PC13(熄灭LED) delay(1000000); } }📌 说明:
- 这段代码使用了寄存器直接操作法,不依赖 HAL 库,更贴近底层;
- PC13 是多数开发板上的 LED 引脚(低电平点亮);
- 延时不精确,仅用于演示。
💬 如果你想用 HAL 库版本,请确保已正确引入
stm32f1xx_hal.c并调用HAL_Init()和SystemClock_Config()。
第七步:编译 & 下载 —— 看见成果的时刻到了!
编译工程
按下F7键(Build),等待编译结束。
如果一切顺利,你会在底部 Build Output 窗口中看到:
".\Output\Blink.axf" - 0 Error(s), 0 Warning(s).✅ 表示编译成功!
同时,在输出目录下应该能找到Blink.hex文件。
下载程序
- 用 ST-Link 连接开发板(注意 SWCLK、SWDIO、GND、VCC 正确连接)
- 上电开发板
- 在 Keil 中点击
Flash > Download(或按F8)
如果出现:
“Erase Done” → “Program Done” → “Verify OK”
🎉 恭喜!程序已成功写入芯片!
稍等片刻,你应该能看到开发板上的 LED 开始闪烁。
常见问题排查清单(亲测有效)
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
编译报错'GPIOC' undeclared | 头文件未包含或设备未选对 | 检查stm32f1xx.h是否存在,确认芯片型号匹配 |
| HEX 文件未生成 | Output 页面未勾选 Create HEX File | 回到 Options for Target 设置 |
| 下载失败:“No target connected” | 仿真器未识别 / 供电异常 | 检查 USB 连接、ST-Link 驱动、目标板供电 |
| 板子不运行,但下载成功 | 启动文件缺失或主频配置错误 | 确保已添加 startup 文件,检查晶振设置 |
| LED 不闪 | 引脚不对或电平逻辑反了 | 查开发板原理图,尝试换其他引脚测试 |
🛠 调试技巧:可以先用万用表测 PC13 对地电压,看看是否在高低电平切换。
一点深入思考:Keil5 到底在做什么?
当你点击“Build”的那一刻,Keil 其实在幕后完成了一整套复杂的工具链协作:
- 预处理:展开
#include,#define - 编译:将 C 代码翻译成汇编(Arm Compiler)
- 汇编:将
.s文件转为机器码 - 链接:把所有
.o文件合并,确定函数地址(基于 scatter 文件) - 生成输出:产出
.axf(调试用)、.hex(烧录用)
而这一切的前提,就是你在“创建新工程”时打下的基础:
选对了芯片 → 才有正确的寄存器定义;
加入了启动文件 → 才能正确跳转到 main;
设置了输出选项 → 才能得到可烧录的文件。
所以说,工程创建不是形式主义,而是构建整个嵌入式系统的地基。
给初学者的几点实用建议
- 不要一开始就追求完美工程结构,先让第一个 LED 亮起来再说。
- 善用模板工程:一旦成功运行一次,就把整个文件夹备份为“Keil_Template”,下次直接复制使用。
- 养成规范命名习惯:源文件用
.c/.h,避免.txt改后缀。 - 学会看编译日志:Error 和 Warning 是最好的老师。
- 配合 STM32CubeMX 使用更高效:它可以自动生成 Keil 工程,省去手动配置烦恼。
写在最后:工具只是起点,思维才是核心
搭建 Keil5 环境,看似只是安装软件、点几个按钮的事,但它背后承载的是你对嵌入式系统工作流程的理解:
- 如何组织代码?
- 如何控制硬件?
- 如何调试故障?
- 如何将抽象逻辑转化为物理行为?
当你第一次亲手让一个 LED 按照你的意志闪烁时,那种成就感,远比学会某个工具本身更有意义。
所以,别再停留在“看懂了”阶段。
现在就打开电脑,下载 Keil,动手创建你的第一个工程吧!
💡高频关键词回顾(方便搜索复习):
keil5开发环境、keil5怎么创建新工程、Keil5安装教程、uVision5使用、MDK-ARM配置、Arm Compiler 6、启动文件作用、STM32F103C8T6工程配置、HEX文件生成失败、Flash下载失败、调试器连接不上、工程分组管理、编译选项设置、器件支持包安装、分散加载机制解释
有任何问题,欢迎留言交流。下一期,我们讲:如何用 Keil + ST-Link 调试变量、查看内存、定位 HardFault 异常。