2、开发环境搭建:Keil MDK安装与配置、STM32CubeMX初始化、串口驱动安装、第一个点灯程序
好,咱们正式开始动手了。这一章,说白了就是「把家伙事儿备齐」。很多初学者一上来就急着写代码,结果环境没配好,卡在编译报错上半天,心态直接崩了。我当年带项目时,有个新人就是装错了驱动版本,折腾了两天,最后发现是USB线的问题——嗯,这种事我见得太多了。
所以这一章,咱们稳扎稳打,把Keil MDK、STM32CubeMX、串口驱动这三样东西装好、配好,然后跑一个经典的点灯程序。灯一亮,你的嵌入式之路就算正式开始了。
2.1 Keil MDK安装与配置
Keil MDK,全称Microcontroller Development Kit,是ARM内核单片机开发最主流的IDE。我个人习惯用MDK-ARM V5.38版本,太新的版本有时候对老芯片支持不好,太旧的又缺功能。
2.1.1 下载与安装
去ARM官网或者Keil官网下载MDK-ARM安装包。注意区分版本:
| 版本 | 特点 | 建议 |
|---|---|---|
| MDK-ARM V5.38 | 稳定,支持Cortex-M全系列 | 推荐新手使用 |
| MDK-ARM V6.x | 编译器更新,编译更快 | 老工程可能不兼容 |
安装时注意:
- 路径不要有中文和空格。我习惯装到
C:\Keil_v5 - 安装过程中会提示安装驱动,全部勾上
- 安装完成后,用管理员权限打开一次Keil,避免后续权限问题
2.1.2 注册与激活
Keil MDK需要License才能编译超过32KB的代码。你可以在网上找破解工具,但更推荐用正版——学生版其实有免费限制,对于学习完全够用。
激活步骤:
- 打开Keil,点击
File → License Management - 复制CID码
- 运行注册机,生成激活码
- 粘贴到License Management中,点击Add LIC
2.1.3 配置编译器与调试器
安装完成后,先别急着写代码。咱们先配好编译器:
- 点击
Project → Manage → Project Components - 在
Device标签页选择你的芯片型号,比如STM32F103C8T6 - 在
Toolchain标签页选择ARM Compiler V5或V6
我个人建议用V5编译器,兼容性最好。V6虽然快,但有些老库会报错。
2.2 STM32CubeMX初始化
STM32CubeMX是ST官方出的图形化配置工具。你想想看,以前配置时钟、GPIO、外设,全得手写寄存器,一个不小心就写错。现在好了,鼠标点一点,代码自动生成。
2.2.1 安装STM32CubeMX
去ST官网下载STM32CubeMX,安装过程很简单,一路Next就行。注意:
- 需要Java运行环境,如果没有,安装程序会自动下载
- 安装完成后,第一次打开会提示下载固件包,建议下载全系列,省得以后麻烦
2.2.2 创建第一个工程
打开CubeMX,点击 New Project,在搜索框输入你的芯片型号。我以STM32F103C8T6为例:
- 双击芯片型号,进入配置界面
- 在
Pinout & Configuration标签页,找到SYS,将Debug设置为Serial Wire - 找到
RCC,将HSE设置为Crystal/Ceramic Resonator - 在
Clock Configuration标签页,配置系统时钟为72MHz
2.2.3 生成代码
配置完成后,点击 Project → Generate Code:
- Toolchain/IDE选择MDK-ARM V5
- Firmware Package选择你下载的版本
- 点击Generate,代码就自动生成了
生成完成后,用Keil打开工程文件(.uvprojx),就能看到完整的工程结构了。
2.3 串口驱动安装
串口是嵌入式开发中最常用的调试接口。说白了,就是通过一根USB线,让电脑和单片机「聊天」。
2.3.1 安装CH340/CP2102驱动
市面上最常见的USB转串口芯片是CH340和CP2102。怎么区分?看你的开发板上的小芯片型号:
| 芯片型号 | 驱动名称 | 下载方式 |
|---|---|---|
| CH340 | CH340SER.EXE | 百度搜索「CH340驱动」 |
| CP2102 | CP210x_VCP_Windows | Silicon Labs官网 |
安装步骤:
- 下载对应驱动
- 以管理员身份运行安装程序
- 插上开发板,打开设备管理器,查看端口号(比如COM3)
2.3.2 验证串口通信
驱动装好后,用串口助手测试一下:
- 打开串口助手(推荐SSCOM或Putty)
- 设置波特率115200,数据位8,停止位1,无校验
- 打开串口,短接TX和RX引脚,发送数据看是否能回显
如果能收到自己发的数据,说明串口驱动和硬件都没问题。
2.4 第一个点灯程序
好了,环境都搭好了,咱们来写第一个程序——点灯。这是嵌入式界的「Hello World」,灯一亮,你就正式入门了。
2.4.1 硬件连接
以STM32F103C8T6最小系统板为例:
- 板载LED通常接在PC13(高电平熄灭,低电平点亮)
- 或者自己外接一个LED,正极接PA0,负极串联一个220Ω电阻到GND
2.4.2 编写代码
在CubeMX生成的工程中,找到 main.c,在 while(1) 循环里添加代码:
/* 在main.c的while(1)中添加 */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // 点亮LED
HAL_Delay(500); // 延时500ms
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // 熄灭LED
HAL_Delay(500); // 延时500ms
如果你用的是PA0外接LED,代码改成:
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 点亮
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 熄灭
HAL_Delay(500);
2.4.3 编译与下载
点击Keil的 Build 按钮(或者按F7),编译工程。如果没报错,点击 Download 按钮(或者按F8),程序就会烧录到单片机里。
Project → Options for Target → Debug,选择ST-Link Debugger,然后点击Settings,确认SWD模式已勾选。
2.4.4 观察结果
下载成功后,复位开发板。如果一切正常,你会看到LED以1秒的频率闪烁(亮500ms,灭500ms)。
嗯,到这里,你的第一个嵌入式程序就跑起来了。虽然只是点个灯,但背后的流程——环境搭建、工程配置、代码编写、编译下载——和做任何复杂的嵌入式项目都是一样的。
下一章,咱们会深入GPIO的原理,看看这个灯到底是怎么被「点亮」的。到时候我会讲一个我在项目中踩过的坑,保证让你印象深刻。
公众号:蓝海资料掘金营,微信deep3321