第3章:嵌入式开发环境搭建:Keil MDK安装与配置、STM32CubeMX安装、驱动安装、第一个工程(点亮LED)
好,咱们正式开始动手了。
前两章聊了不少概念,什么寄存器、时钟树、中断向量表。说实话,光看理论容易犯困。我当年刚入行的时候,也是对着书本看了三天,结果连个灯都没点亮,差点怀疑人生。
所以这一章,咱们直接干实事——把开发环境搭起来,然后让板子上的LED亮起来。你想想看,当那个小灯第一次被你点亮的时候,那种成就感,比看十页书都管用。
3.1 工具链概览:我们需要装什么?
做嵌入式开发,说白了就是三样东西:编译器(把C代码变成机器码)、调试器驱动(让电脑和板子说话)、芯片初始化代码生成器(帮你省掉写寄存器配置的苦力活)。
针对咱们的轨道车门项目,我推荐这套组合:
| 工具 | 用途 | 版本建议 |
|---|---|---|
| Keil MDK-ARM | 编译、下载、调试 | V5.38 或更高 |
| STM32CubeMX | 图形化配置芯片外设 | V6.10 或更高 |
| ST-Link驱动 | 调试器与电脑通信 | 最新版即可 |
| USB转串口驱动 | 串口打印调试信息 | CH340/CP2102 |
嗯,这里要注意:Keil MDK是收费软件,但官方提供了代码大小限制在32KB的免费版。咱们入门阶段完全够用。我在项目中遇到过好几次,有人一上来就装破解版,结果各种报错,折腾两天才发现是破解补丁和系统不兼容。所以,我建议你先用免费版,等真需要大工程了再说。
3.2 Keil MDK安装与配置
安装过程其实挺无脑的,一路Next就行。但有三个坑,我帮你提前踩了:
- 安装路径不要有中文——Keil对中文路径支持很差,我曾经因为把工程放在“桌面”上,编译死活报错,折腾了一下午才发现是路径问题。
- 安装时勾选“Add to PATH”——否则后面命令行调用会找不到编译器。
- 安装完成后重启电脑——别问我为什么,驱动加载就是这么玄学。
安装完成后,打开Keil,你会看到一个灰色的界面。别慌,先做两件事:
- 激活License:点击 File → License Management,输入你的激活码(免费版不需要这一步)。
- 安装器件包:点击 Pack Installer 按钮,找到 STMicroelectronics → STM32F1 Series → STM32F103C8,点击 Install。这一步是让Keil认识你的芯片型号。
我个人习惯是把Pack Installer放在后台慢慢下载,先去做下一步。因为这东西下载速度嘛……你懂的。
3.3 STM32CubeMX安装
STM32CubeMX是ST官方出的图形化配置工具。说白了,就是帮你自动生成初始化代码。你想想看,以前配置一个GPIO要翻几百页数据手册,现在鼠标点两下就搞定了。
安装步骤:
- 去ST官网下载最新版(需要注册账号,免费)。
- 安装时需要Java运行环境,如果电脑没有,它会自动帮你装。
- 安装完成后,打开软件,点击 Help → Install New Libraries,下载STM32F1的固件库。
3.4 驱动安装:让电脑认识你的板子
咱们用的调试器是ST-Link,它长什么样?就是一块小电路板,一头连电脑USB,一头连开发板的SWD接口。
驱动安装分两步:
- ST-Link驱动:安装Keil时已经自带了,但有时候系统不认。如果插上板子后设备管理器里显示黄色感叹号,去ST官网下载“ST-Link USB driver”手动安装。
- 串口驱动:如果你的开发板上有CH340芯片(看板子上的丝印),需要装CH340驱动。如果是CP2102,就装对应的驱动。
怎么验证驱动装好了?插上板子,打开设备管理器,看到“STMicroelectronics ST-Link”和“COM端口”出现,就说明OK了。
3.5 第一个工程:点亮LED
好,重头戏来了。咱们用STM32CubeMX生成一个工程,让板子上的LED亮起来。
先看看你的开发板,LED接在哪个引脚上?以最常见的STM32F103C8T6蓝色板为例,板载LED通常接在PC13(也有接PB12的,看具体板子)。
第一步:用CubeMX生成工程
- 打开CubeMX,点击“New Project”。
- 在搜索框输入“STM32F103C8”,选中芯片,双击。
- 在Pinout视图中,找到PC13引脚,右键选择“GPIO_Output”。
- 点击“Configuration”标签,在GPIO设置里,把输出模式设为“Push-Pull”,速度设为“Low”。
- 点击“Project Manager”,设置工程名和路径(记住,不要中文路径!)。
- Toolchain/IDE选择“MDK-ARM”。
- 点击“GENERATE CODE”,生成工程。
第二步:在Keil中编写代码
生成完成后,点击“Open Project”,Keil会自动打开。在左侧的Project栏里,找到 main.c 文件,双击打开。
你会看到CubeMX已经生成了很多初始化代码。咱们只需要在 main() 函数的 while(1) 循环里加几行:
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // 低电平点亮
HAL_Delay(500); // 延时500ms
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // 高电平熄灭
HAL_Delay(500);
}
}
等等,为什么是低电平点亮?因为板载LED的阳极接了VCC,阴极接了PC13。所以PC13输出低电平时,电流流过LED,它就亮了。这就是所谓的“低电平有效”。
第三步:编译与下载
- 点击工具栏的“Build”按钮(或者按F7),编译工程。如果没报错,会显示“0 Error(s), 0 Warning(s)”。
- 用USB线连接开发板和电脑。
- 点击“Download”按钮(或者按F8),程序就会烧录到芯片里。
如果一切顺利,你会看到板子上的LED开始以0.5秒的间隔闪烁。那一刻,相信我,你会觉得之前所有的折腾都值了。
- 检查Options for Target → Debug → Settings,看是否识别到ST-Link。
- 检查Flash Download选项卡,确保勾选了“Reset and Run”。
- 按住板子上的复位键,点击下载,听到“叮”一声后松手——这是老工程师的祖传秘方。
3.6 本章小结
咱们这一章干了三件事:装好了Keil和CubeMX、装好了驱动、点亮了LED。你想想看,从零开始,到现在能让硬件听你的话,这本身就是一大步。
下一章,咱们会深入讲讲GPIO的寄存器配置,以及如何用逻辑分析仪看波形。但今天,先享受一下这个闪烁的小灯吧。
对了,如果你在搭建环境时遇到任何问题,别硬扛。嵌入式开发就是这样,有时候一个坑卡你三天,但问对人可能三分钟就解决了。我当年要是有人带,至少能少走半年弯路。
公众号:蓝海资料掘金营,微信deep3321