第二章 开发环境搭建:工欲善其事,必先利其器

做嵌入式开发,说白了就是跟工具打交道。我见过不少新手,代码写得挺溜,结果卡在环境搭建上,一卡就是半天。这一章咱们就把 Keil MDK-ARM、STM32CubeMX、ST-Link 驱动这三个核心工具装好,再建一个干干净净的工程模板。跟着我的节奏来,半小时内搞定。

本章目标:完成 Keil MDK-ARM、STM32CubeMX、ST-Link 驱动的安装与验证,并创建第一个可编译通过的 STM32 工程模板。

2.1 工具链全景图

先看看这三样东西各管什么,免得装完了还不知道谁是谁。

STM32 开发工具链 Keil MDK-ARM 代码编辑 + 编译 + 调试 STM32CubeMX 图形化配置 + 代码生成 ST-Link 驱动 调试器 + 下载器 工作流程 ① 用 CubeMX 配置外设引脚和时钟 → 生成初始化代码 ② 在 Keil 中编写业务逻辑 → 编译生成 .hex 文件 ③ 通过 ST-Link 下载到目标板 → 在线调试 三者缺一不可,建议按顺序安装

2.2 Keil MDK-ARM 安装

Keil 是 ARM 生态里最主流的 IDE,没有之一。我最早用 Keil 还是大学做 51 单片机的时候,后来转到 STM32,发现界面几乎没变——嗯,这算是好事,上手快。

2.2.1 下载与安装步骤

  1. 获取安装包:去 Keil 官网(www.keil.com)下载 MDK-ARM 最新版本。目前稳定版是 V5.38,建议用这个。
  2. 运行安装程序:双击 .exe,一路 Next。安装路径我建议保持默认,别往中文目录里塞。
  3. 选择组件:安装过程中会提示选择器件支持包(Device Family Pack)。如果你网络好,可以勾上在线下载;网络不好就跳过,后面用 CubeMX 装也一样。
  4. 完成安装:装完后桌面会有 uVision 图标,先别急着打开。

我的习惯:装完 Keil 后第一件事,去 File → License Management 里看一眼 CID 码。后面装 Pack 或者激活 License 都会用到这个。

2.2.2 安装器件支持包

Keil 本身只是个壳,真正认识 STM32 芯片的是 Pack 包。没有 Pack,你连芯片型号都选不到。

  • 在线安装:打开 Keil,点击 Pack Installer 图标,找到 STM32F1xx_DFP 或 STM32F4xx_DFP,点 Install。
  • 离线安装:如果你在公司内网或者网速慢,去 Keil 官网下载对应的 .pack 文件,双击就能装。

我曾经踩过的坑:有一次装完 Keil 发现编译报错 "device not found",折腾了半天才发现是 Pack 版本不对。STM32F103 要用 F1 的 Pack,别下成 F4 的。

2.3 STM32CubeMX 安装

CubeMX 是 ST 官方出的图形化配置工具。说白了,你点点鼠标,它就把 GPIO、时钟、外设的初始化代码全给你生成了。我刚开始做项目时还手写寄存器,后来用了 CubeMX——真香。

2.3.1 安装步骤

  1. 下载:去 ST 官网搜 "STM32CubeMX",下载最新版。需要注册一个 ST 账号,免费的。
  2. 安装:解压后运行 SetupSTM32CubeMX.exe。注意,它需要 Java 运行环境(JRE)。如果你的电脑没有 JRE,安装包会自动帮你装。
  3. 配置固件包路径:第一次打开 CubeMX 时,会提示设置固件包存放路径。我建议单独建一个文件夹,比如 D:\STM32Cube\Repository,别放 C 盘。

小技巧:CubeMX 的固件包动辄几百 MB,下载很慢。你可以去 ST 官网手动下载对应系列的固件包,解压后放到 Repository 目录下,CubeMX 会自动识别。

2.3.2 验证安装

打开 CubeMX,点击 New Project,在 Board Selector 里搜 "STM32F103C8"。如果能搜到,说明安装成功。如果搜不到——嗯,检查一下固件包有没有装好。

2.4 ST-Link 驱动安装

ST-Link 是 ST 官方的调试下载器。买开发板时通常会送一个板载的 ST-Link,插上 USB 就能用。但前提是——你得装驱动。

2.4.1 驱动安装步骤

  1. 下载驱动:去 ST 官网搜 "ST-Link driver",或者直接装 STM32CubeProgrammer,里面自带驱动。
  2. 安装:运行 dpinst_amd64.exe(64 位系统)或 dpinst_x86.exe(32 位系统)。
  3. 验证:插上 ST-Link,打开设备管理器。如果看到 "STMicroelectronics STLink dongle" 且没有黄色感叹号,就说明驱动装好了。

我曾经遇到的坑:有一次插上 ST-Link 后设备管理器里显示 "Unknown device",换了 USB 线也不行。后来发现是驱动被 Win10 自动更新给覆盖了。解决办法:去设备管理器里手动更新驱动,指向 ST 的驱动目录。

2.5 创建第一个工程模板

工具都装好了,咱们来建一个工程模板。这个模板后面所有章节都会用到,所以一次建好,后面直接复制。

2.5.1 用 CubeMX 生成初始化代码

  1. 新建项目:打开 CubeMX,点击 New Project,选择芯片 STM32F103C8Tx。
  2. 配置时钟:进入 Clock Configuration 标签页,把 HCLK 设为 72MHz。CubeMX 会自动帮你算好分频系数。
  3. 配置 GPIO:在 Pinout & Configuration 里,把 PC13 设为 GPIO_Output(这是板载 LED 的引脚)。
  4. 生成代码:点击 Project → Generate Code,选择 Toolchain 为 MDK-ARM,版本选 V5。给项目起个名字,比如 "STM32_Template"。

2.5.2 在 Keil 中编译验证

  1. 打开项目:找到 CubeMX 生成的 .uvprojx 文件,双击用 Keil 打开。
  2. 编译:按 F7 或者点击 Project → Build Target。如果一切顺利,底部 Output 窗口会显示 "0 Error(s), 0 Warning(s)"。
  3. 添加用户代码:在 main.c 的 while(1) 循环里加一行:
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(500);

再编译一次,确认没有报错。

模板结构说明:一个标准的 CubeMX 生成工程包含以下目录:

目录/文件说明
Core/Inc头文件目录,存放 main.h、stm32f1xx_hal_conf.h 等
Core/Src源文件目录,存放 main.c、stm32f1xx_hal_msp.c 等
DriversHAL 库驱动,包含 CMSIS 和 STM32F1xx_HAL_Driver
.uvprojxKeil 项目文件,双击打开

2.6 环境验证清单

装完所有工具后,我建议你按这个清单检查一遍,免得后面调试时才发现问题。

检查项验证方法预期结果
Keil 安装打开 uVision,新建空项目界面正常,无报错
器件 Pack在 Pack Installer 中搜索 STM32F1显示已安装版本号
CubeMX 安装打开 CubeMX,新建 STM32F103C8 项目能正常进入配置界面
ST-Link 驱动插上 ST-Link,查看设备管理器显示 STLink dongle,无感叹号
工程编译打开模板工程,按 F7 编译0 Error, 0 Warning

我的建议:把编译通过的模板工程压缩备份一份。后面每做一个新项目,直接解压改名字,省去重复配置的麻烦。

好了,环境搭建就到这里。工具链装好、模板建好,后面咱们就可以专心写代码了。记住,嵌入式开发里,环境问题往往比代码问题更磨人——一次性搞定,后面就顺畅了。