3. 开发环境搭建(Keil MDK):从安装到第一个工程

好,咱们正式开始动手。这一章我带你走一遍 Keil MDK 的完整搭建流程。从安装、破解,到芯片包管理,再到创建你的第一个工程模板,最后连上调试器跑通下载。每一步我都会把项目里踩过的坑指给你看。

本章核心目标: 搭建一个可复用的 STM32 工程模板,并验证编译 + 下载链路通畅。

3.1 Keil MDK 安装与破解

Keil MDK 是 ARM 官方推荐的 IDE,对 Cortex-M 系列支持最成熟。我个人习惯用 MDK 5.38 或 5.39 版本,太新的版本有时兼容性反而麻烦。

安装步骤

  1. 下载安装包:去 Keil 官网(www.keil.com)下载 MDK-ARM 安装包。注意区分 C51(51 单片机)和 MDK-ARM(ARM 内核),别下错了。
  2. 运行安装:以管理员身份运行,一路 Next。安装路径我建议用默认的 C:\Keil_v5,后面很多第三方工具会默认找这个路径。
  3. 破解(License 注册):安装完后打开 Keil uVision,点击 File → License Management。复制 CID 码,用注册机生成 License。这里要注意——注册机必须以管理员身份运行,否则生成的 License 无效。我曾经在这上面浪费了半小时,怎么都注册不上,后来才发现是权限问题。
⚠ 重要提醒: 破解时 Target 必须选 ARM,不是 C51。选错的话 License 写进去也白搭,编译时会报“未注册”错误。

验证安装

打开 Keil,新建一个空工程,如果能正常弹出芯片选择对话框,说明安装成功。如果弹出“License 过期”或“未注册”,回去重新走一遍破解流程。

3.2 芯片包(DFP)安装

Keil 本身不包含任何芯片的寄存器定义和启动代码。你需要安装对应厂商的 Device Family Pack(DFP)。说白了,DFP 就是芯片的“身份证”和“说明书”。

安装方式

  • 在线安装:打开 Keil,点击 Pack Installer 图标。在左侧找到你的芯片型号(比如 STM32F103C8),点击右侧的 Install。网络慢的话,这一步可能卡很久。
  • 离线安装:去 ST 官网或 Keil 官网下载对应的 .pack 文件,双击安装。我建议新手用离线包,稳定且快。
芯片系列 DFP 包名 版本建议
STM32F1 系列 Keil.STM32F1xx_DFP 2.4.0 或以上
STM32F4 系列 Keil.STM32F4xx_DFP 2.17.0 或以上
STM32H7 系列 Keil.STM32H7xx_DFP 3.1.0 或以上
💡 小技巧: 安装完 DFP 后,可以在 Keil 安装目录下的 ARM/PACK 文件夹里看到所有已安装的包。如果某个工程报“找不到芯片”,先来这里检查 DFP 是否装全了。

3.3 工程模板创建

每次新建工程都从头配置一遍?太累了。我习惯做一个 最小工程模板,以后所有项目都基于它复制修改。这样能省下大量重复劳动。

创建步骤

  1. 新建工程:Project → New uVision Project,选择芯片型号(比如 STM32F103C8)。
  2. 添加启动文件:Keil 会自动弹出 Manage Run-Time Environment 窗口。这里勾选 CMSIS → CORE 和 Device → Startup。启动文件是芯片上电后最先执行的汇编代码,负责初始化堆栈和中断向量表。
  3. 添加主程序文件:在工程目录下新建一个 main.c,写入最简单的空循环代码:
#include "stm32f1xx.h"

int main(void)
{
    while(1)
    {
        // 空循环,等待调试
    }
}
  1. 配置输出路径:点击 Project → Options for Target,在 Output 选项卡里勾选 Create HEX File,并把输出文件夹设为 .\Output。这样生成的 .hex 文件会统一放在 Output 目录下,不会和源码混在一起。
模板复用建议: 把配置好的工程文件夹整个复制一份,改个名字就能当新项目用。我手上有 F1、F4、H7 三套模板,覆盖了大部分项目需求。

3.4 编译与下载配置

工程建好了,先编译试试。点击 Build 按钮(或者按 F7)。如果一切正常,底部 Output 窗口会显示 0 Error(s), 0 Warning(s)。如果报错,多半是 DFP 没装对,或者 main.c 里少了头文件。

下载配置

编译通过后,需要配置下载器。点击 Options for Target → Debug 选项卡:

  • 选择调试器:下拉菜单里选 ST-Link Debugger 或 J-Link / J-Trace。
  • 进入 Settings:点击右侧的 Settings 按钮,确认调试器已被识别。如果显示 No Device,检查 USB 连接和驱动。
  • Flash Download 配置:切换到 Flash Download 子页面,勾选 Reset and Run。这样下载完成后芯片会自动复位运行,不用手动按复位键。
⚠ 常见坑: 如果下载时提示 Flash Timeout,多半是芯片的读保护(RDP)没解除。用 ST-Link Utility 或 J-Flash 先全片擦除一次,再回来下载就好了。

3.5 调试器(ST-Link / J-Link)配置

调试器是连接 PC 和开发板的桥梁。ST-Link 是 ST 官方调试器,便宜且兼容性好;J-Link 是 SEGGER 家的,速度快、功能强,但价格贵。我平时用 ST-Link 做原型验证,J-Link 用在正式项目里。

ST-Link 配置要点

  • 驱动安装:Win10/11 通常自动识别。如果识别不了,去 ST 官网下载 ST-Link USB driver。
  • 接线:SWD 接口只需要 4 根线——SWDIO、SWCLK、GND、VCC(可选)。我见过有人把 SWDIO 和 SWCLK 接反了,折腾半天才发现。
  • 速度设置:在 Debug 的 Settings 里,SW 时钟频率建议设为 4 MHz。太高容易不稳定,太低下载慢。

J-Link 配置要点

  • 驱动安装:安装 SEGGER 的 J-Link 软件包,里面包含驱动和 J-Flash 工具。
  • 固件更新:J-Link 用久了可能需要更新固件。打开 J-Link Configurator,点击 Update Firmware。
  • SWD 模式:J-Link 默认是 JTAG 模式,记得在 Settings 里改成 SWD,否则只接 4 根线会报错。
对比项 ST-Link J-Link
价格 便宜(几十元) 较贵(几百到上千)
下载速度 中等 快
调试功能 基础 高级(如实时跟踪)
兼容性 仅 ST 芯片 几乎所有 ARM 芯片

3.6 知识体系总览

下面这张图把本章的核心流程串起来了。从安装到调试,每一步都有依赖关系。你跟着这个流程走,基本不会漏掉关键环节。

Keil MDK 开发环境搭建流程 Keil MDK 开发环境搭建流程 1. 安装 Keil MDK 2. 破解(License) 3. 安装芯片包(DFP) 4. 创建工程模板 5. 编译 & 下载配置 6. 调试器(ST-Link/J-Link) ⚠ 关键提醒 • 破解时 Target 选 ARM • DFP 版本匹配芯片型号 • 下载前勾选 Reset and Run 💡 个人经验 • 模板复用省时间 • SWD 接线别接反 • 离线包比在线快

3.7 验证与测试

所有配置完成后,连上开发板,点击 Download 按钮。如果一切顺利,你会看到进度条走完,然后开发板上的 LED 开始闪烁(如果代码里写了)。

如果下载失败,别慌。按这个顺序排查:

  1. 检查硬件连接:SWD 的四根线都接好了吗?GND 共地了吗?
  2. 检查驱动:设备管理器里能看到调试器吗?看不到就重装驱动。
  3. 检查配置:Debug 选项卡里选对调试器了吗?Flash Download 里勾选 Reset and Run 了吗?
  4. 检查芯片状态:芯片是不是被锁了?用 ST-Link Utility 全片擦除一次。
💡 我的习惯: 每次拿到新开发板,第一件事就是跑一个 LED 闪烁程序。能点亮 LED,说明整个工具链——从编译到下载到运行——全部打通。后面再复杂的项目,心里也有底。

好,环境搭建就到这里。你跟着走一遍,应该能顺利跑通第一个程序。后面章节我们会基于这个模板,一步步深入 Cortex-M 内核的世界。