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,避免后续权限问题
注意: 安装路径一旦确定,后续不要随意移动。我曾经因为重装系统后直接复制Keil文件夹,结果注册信息全丢了,折腾了一下午。

2.1.2 注册与激活

Keil MDK需要License才能编译超过32KB的代码。你可以在网上找破解工具,但更推荐用正版——学生版其实有免费限制,对于学习完全够用。

激活步骤:

  1. 打开Keil,点击 File → License Management
  2. 复制CID码
  3. 运行注册机,生成激活码
  4. 粘贴到License Management中,点击Add LIC
小技巧: 激活后如果提示「过期」,把系统时间调到2020年再激活一次,然后改回当前时间。这招我用了好几年,一直管用。

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为例:

  1. 双击芯片型号,进入配置界面
  2. Pinout & Configuration 标签页,找到 SYS,将Debug设置为Serial Wire
  3. 找到 RCC,将HSE设置为Crystal/Ceramic Resonator
  4. Clock Configuration 标签页,配置系统时钟为72MHz
重点: 时钟配置是嵌入式开发的基础。72MHz是STM32F103的最高主频,配错了程序跑不起来。我见过有人配成128MHz,芯片直接不工作,还以为是芯片坏了。

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官网

安装步骤:

  1. 下载对应驱动
  2. 以管理员身份运行安装程序
  3. 插上开发板,打开设备管理器,查看端口号(比如COM3)
避坑指南: 我曾经遇到过驱动装好了,但设备管理器里显示黄色感叹号。折腾了半天,发现是USB线的问题——有些便宜线只能充电,不能传数据。换一根好线就好了。

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),程序就会烧录到单片机里。

提示: 如果下载失败,检查一下Debug设置。点击 Project → Options for Target → Debug,选择ST-Link Debugger,然后点击Settings,确认SWD模式已勾选。

2.4.4 观察结果

下载成功后,复位开发板。如果一切正常,你会看到LED以1秒的频率闪烁(亮500ms,灭500ms)。

嗯,到这里,你的第一个嵌入式程序就跑起来了。虽然只是点个灯,但背后的流程——环境搭建、工程配置、代码编写、编译下载——和做任何复杂的嵌入式项目都是一样的。

下一章,咱们会深入GPIO的原理,看看这个灯到底是怎么被「点亮」的。到时候我会讲一个我在项目中踩过的坑,保证让你印象深刻。


公众号:蓝海资料掘金营,微信deep3321