2. 开发环境搭建:Keil MDK 安装与配置、J-Link 驱动安装、第一个裸机工程模板

好,咱们正式开始动手了。这一章我带你搭好开发环境。说白了,就是给电脑装上能写代码、能编译、能下载调试的工具链。别小看这一步,我见过太多学员卡在环境上,代码写好了却跑不起来,最后发现是驱动没装对。

咱们的目标很明确:装好 Keil MDK,配好 J-Link 驱动,然后点亮你的第一颗 LED。走起。

2.1 Keil MDK 安装与配置

Keil MDK 是 ARM 公司官方的 IDE,专门用来搞 Cortex-M 系列芯片。我个人习惯用 MDK 5.38 版本,稳定,坑少。你如果手头有更新的版本也没问题,操作逻辑基本一致。

2.1.1 下载与安装

  1. 去 ARM 官网或者 Keil 官网下载 MDK-ARM 安装包。注意区分版本,别下成 C51 了,那个是给 51 单片机用的。
  2. 双击安装,一路 Next。安装路径我建议别带中文,也别有空格。比如 D:\Keil_v5 就挺好。
  3. 安装过程中会提示要不要装一些 pack(芯片支持包)。先别急,后面咱们手动装。

注意: 安装路径不要有中文!我曾经帮一个学员远程调试,他装在了「D:\开发工具\Keil」里,结果编译一直报路径错误。改成纯英文路径后,问题立刻消失。嗯,Keil 对中文路径的支持确实不太好。

2.1.2 芯片支持包安装

咱们用的芯片是 ARM Cortex-M4 内核的,具体型号可能是 STM32F4 系列或者国产的 GD32F4 系列。你需要下载对应的 Device Family Pack。

  • 打开 Keil MDK,点击菜单栏的 Pack Installer 图标。
  • 在搜索框输入你的芯片型号,比如 STM32F407
  • 找到对应的 Pack,点击 Install。等待下载完成。

为什么一定要装这个?因为 Pack 里包含了芯片的寄存器定义、启动文件、链接脚本。没有它,你连 GPIO 都点不亮。

2.1.3 破解与 License 注册

嗯,这里得说实话。MDK 是收费软件,但咱们学习阶段可以用评估版。评估版有 32KB 代码大小限制,对于裸机开发来说基本够用。如果你需要更大的代码空间,可以购买正版 License,或者……你懂的。

小技巧: 我个人建议先用评估版学完前 10 章,等后面项目大了再考虑 License。别一开始就折腾破解,容易把环境搞乱。

2.2 J-Link 驱动安装

J-Link 是咱们的调试器,负责把电脑上的程序烧录到芯片里,还能单步调试。市面上有正版 J-Link,也有各种山寨版。说实话,学习阶段用山寨版完全没问题,但驱动得装对。

2.2.1 下载驱动

去 SEGGER 官网下载 J-Link 驱动包。注意选择对应你操作系统的版本。Windows 用户就下 Windows 版。

2.2.2 安装步骤

  1. 双击安装包,一路 Next。
  2. 安装过程中会提示选择安装组件。我建议全选,尤其是 USB 驱动和 GDB Server。
  3. 安装完成后,把 J-Link 插入电脑 USB 口。系统会自动识别并安装驱动。

怎么确认驱动装好了?打开设备管理器,找到「J-Link driver」或者「SEGGER J-Link」字样,没有黄色感叹号就说明 OK。

避坑指南: 我曾经遇到过一个情况——J-Link 插上后电脑没反应。折腾了半天,发现是 USB 线的问题。有些 USB 线只能充电,不能传数据。换一根带数据传输功能的线就好了。你想想看,这种低级错误是不是很冤?

2.3 第一个裸机工程模板

环境搭好了,咱们来建第一个工程。这个工程会作为你后面所有实验的模板,所以务必认真跟着做。

2.3.1 新建工程

  1. 打开 Keil MDK,点击菜单 Project → New μVision Project
  2. 选择工程保存路径。我习惯在 D:\ARM_Projects\ 下建一个文件夹,比如 01_LED_Blink
  3. 输入工程名,点击保存。
  4. 在弹出的芯片选择窗口中,找到你的芯片型号。比如 STM32F407VG

2.3.2 添加启动文件与核心代码

新建工程后,Keil 会自动生成一个空项目。你需要手动添加以下文件:

  • startup_stm32f407xx.s:启动文件,汇编写的,负责初始化堆栈、调用 main 函数。
  • system_stm32f4xx.c:系统初始化文件,配置时钟。
  • main.c:你的主程序。

这些文件可以从 Keil 的 Pack 安装目录下找到,或者从 ST 官方库中复制。我个人习惯直接复制一份到工程目录下,方便管理。

2.3.3 配置工程选项

右键点击工程名,选择 Options for Target。这里有几个关键配置:

配置项 推荐值 说明
Target → Xtal (MHz) 8.0 外部晶振频率,根据你的板子来
Output → Select Folder for Objects .\Objects 编译中间文件存放路径
Listing → Select Folder for Listings .\Listings 列表文件存放路径
Debug → Use Simulator 取消勾选 咱们用 J-Link 硬件调试
Debug → Use J-LINK / J-TRACE Cortex 选择调试器

重点: 在 Debug 选项卡里,点击 Settings,确认 J-Link 能识别到你的芯片。如果显示「No Device」,说明连接有问题。检查接线和驱动。

2.3.4 编写第一个程序

在 main.c 里写一个最简单的程序:让 LED 闪烁。代码很简单,就是操作 GPIO 寄存器。

#include "stm32f4xx.h"

void delay(void) {
    for(uint32_t i = 0; i < 500000; i++);
}

int main(void) {
    // 使能 GPIOA 时钟
    RCC->AHB1ENR |= (1 << 0);
    
    // 配置 PA0 为输出模式
    GPIOA->MODER |= (1 << 0);
    
    while(1) {
        GPIOA->ODR |= (1 << 0);   // 点亮 LED
        delay();
        GPIOA->ODR &= ~(1 << 0);  // 熄灭 LED
        delay();
    }
}

这段代码干了什么?说白了就是:开时钟、设引脚、循环亮灭。你可能会问,为什么是 PA0?因为我用的板子上 LED 接在 PA0 上。你的板子可能不一样,记得查原理图。

2.3.5 编译与下载

  1. 点击 Build 按钮(或者按 F7),编译工程。如果没报错,你会看到「0 Error(s), 0 Warning(s)」。
  2. 连接 J-Link 到板子,点击 Download 按钮(或者按 F8)。
  3. 如果一切顺利,板子上的 LED 就开始闪烁了。

提示: 第一次下载如果报错,别慌。检查一下 J-Link 的接线:SWDIO、SWCLK、GND、VCC 这四根线必须接对。我刚开始学的时候,把 SWDIO 和 SWCLK 接反了,折腾了半小时才发现。嗯,这种错误犯一次就记住了。

2.4 工程模板的后续使用

这个工程模板建好后,你可以复制一份作为后续实验的基础。每次新建实验时,只需要修改 main.c 里的代码,其他配置不用动。

我个人习惯把模板保存在一个专门的文件夹里,比如 D:\ARM_Template\。每次新建项目时,直接复制整个文件夹,改个名字就行。省时省力。

好,环境搭好了,第一个程序也跑起来了。下一章咱们开始深入 Cortex-M4 的寄存器,看看芯片内部到底是怎么工作的。你准备好了吗?