2、开发环境搭建:Keil MDK安装与破解、STM32CubeMX配置、驱动安装与调试器连接

说实话,做嵌入式开发这么多年,我见过太多新手在环境搭建这一步就卡住了。明明代码逻辑没问题,结果编译报错、下载失败、调试器连不上……最后发现是环境没配好。这一章,我就带你把这些坑一个个填平。

2.1 Keil MDK的安装与激活

Keil MDK,说白了就是ARM内核单片机最主流的IDE。我最早用Keil还是大学那会儿,装了个盗版,结果编译到一半弹窗提示过期,气得我差点砸电脑。后来工作了才知道,其实官方有免费版,只是有代码大小限制——对于学习来说,完全够用。

2.1.1 下载与安装

去Keil官网下载MDK-Arm版本。注意别下成C51了,那是给51单片机用的。安装过程很简单,一路Next就行。但我建议你注意两点:

  • 安装路径不要有中文。我见过有人装在“D:\开发工具\Keil_v5”这种路径,结果编译某些库时报错,折腾半天才发现是中文空格惹的祸。
  • 安装完成后先别急着打开。先以管理员身份运行一次,否则后面装驱动可能会权限不足。
我的习惯: 我会在D盘建一个“Embedded_Tools”文件夹,把所有开发工具都放进去。Keil、CubeMX、ST-Link驱动……统一管理,重装系统时也方便。

2.1.2 激活(破解)步骤

嗯,这里要说明一下。Keil MDK是收费软件,但官方提供了评估版。如果你只是学习,用评估版完全没问题。但如果你想解除代码大小限制,就需要激活。

激活步骤其实很简单:

  1. 以管理员身份运行Keil MDK
  2. 点击 File → License Management
  3. 复制CID码(一串16进制数字)
  4. 运行注册机(keygen.exe),把CID粘贴进去
  5. 选择Target为ARM,点击Generate生成激活码
  6. 把激活码复制回Keil的License Management窗口,点击Add LIC
注意: 注册机可能会被杀毒软件误报。我建议你暂时关闭实时防护,或者把注册机添加到白名单。另外,激活时务必以管理员身份运行Keil,否则会提示权限不足。

激活成功后,你会看到License Management里多了一条记录,有效期一般是到2032年。够你用到退休了(笑)。

2.2 STM32CubeMX配置

STM32CubeMX是ST官方出的图形化配置工具。你想想看,以前配置时钟树、GPIO、外设,全得看数据手册手动写寄存器,一个不小心就写错了。现在好了,点点鼠标就能生成初始化代码。

我个人习惯是先装CubeMX,再装Keil。因为CubeMX生成的代码可以直接用Keil打开,省去手动配置工程的麻烦。

2.2.1 安装CubeMX

去ST官网下载STM32CubeMX,安装过程同样简单。但要注意:

  • 需要Java运行环境。CubeMX是基于Java的,如果你的电脑没有JRE,安装程序会自动下载。但我建议你手动装一个JDK 11以上版本,稳定一些。
  • 安装路径同样不要有中文。这个我已经强调过很多次了,你记住就行。

2.2.2 配置一个最小系统

打开CubeMX,点击“New Project”,选择你的芯片型号。比如我们常用的STM32F103C8T6,在搜索框输入“STM32F103C8”就能找到。

配置步骤大致如下:

  1. 配置时钟源:选择HSE(外部高速晶振)或HSI(内部振荡器)。我一般选HSE,精度更高。
  2. 配置时钟树:把HCLK拉到最大(比如72MHz)。CubeMX会自动计算分频系数,如果配置不合理它会标红提示。
  3. 配置GPIO:比如把PA0设为输出,PC13设为输入。点一下引脚,选择功能就行。
  4. 配置调试接口:在“System Core → SYS”里,把Debug设为Serial Wire。这一步很重要,否则你下载程序后调试器可能连不上。
避坑指南: 我曾经在项目里忘了配置Debug接口,结果程序下载进去后,ST-Link再也连不上了。最后只能按住复位键,在松手的瞬间点击下载,才救回来。所以,每次新建工程第一件事就是配好Debug接口

2.2.3 生成代码

配置完成后,点击“Project Manager”标签:

  • Project Name:给你的工程起个名字,比如“LED_Blink”
  • Project Location:选择存放路径
  • Toolchain / IDE:选择MDK-ARM V5
  • Firmware Package:选择对应的HAL库版本。我建议选最新稳定版,但别选太新的,有些新版本可能有bug。

点击“GENERATE CODE”,CubeMX就会生成一个完整的Keil工程。你直接用Keil打开就能编译下载了。

2.3 驱动安装与调试器连接

环境搭好了,代码也生成了,接下来就是下载调试。这一步看似简单,但很多人栽在这里。

2.3.1 ST-Link驱动安装

ST-Link是ST官方调试器,买开发板时一般都会送一个。插上USB后,电脑应该能识别到。如果没识别,说明驱动没装好。

驱动安装方法:

  1. 去ST官网下载“ST-Link USB driver”
  2. 运行安装程序,一路Next
  3. 插上ST-Link,打开设备管理器,看看“通用串行总线设备”里有没有“ST-Link Debug”

如果设备管理器里显示黄色感叹号,说明驱动没装对。我建议你卸载重装,或者换个USB口试试。有些劣质USB Hub会导致识别失败。

小技巧: 如果你用的是山寨ST-Link(比如淘宝上十几块那种),可能需要手动安装驱动。在设备管理器里右键更新驱动,选择“浏览我的电脑”,然后指向Keil安装目录下的“ARM\STLink\USBDriver”文件夹。我试过很多次,这个方法最管用。

2.3.2 调试器连接与配置

硬件连接很简单:

  • ST-Link的SWD接口接开发板的SWDIO和SWCLK
  • GND接GND
  • 3.3V接3.3V(如果开发板需要供电)

然后在Keil里配置调试器:

  1. 点击 Project → Options for Target
  2. 选择 Debug 标签
  3. 在右侧下拉框选择 ST-Link Debugger
  4. 点击 Settings,确认SWD模式,速度选1MHz(别选太高,容易不稳定)

配置好后,点击“Download”按钮,程序就能烧录进去了。如果提示“No target connected”,检查一下接线和驱动。

注意: 调试器连接时,不要带电插拔。我有个同事就是习惯性热插拔,结果烧了ST-Link的接口芯片。虽然几块钱能修,但耽误项目进度啊。所以,养成好习惯:先断电,再插拔。

2.4 验证环境是否搭建成功

环境搭好了,我们来验证一下。写一个最简单的LED闪烁程序:

#include "main.h"

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();

    while (1)
    {
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);
        HAL_Delay(500);
    }
}

编译通过,下载到开发板,LED开始闪烁——恭喜你,环境搭建成功了!

如果LED没亮,别慌。先检查硬件:LED是不是接在PA0上?正负极对不对?再检查软件:GPIO配置是不是对的?时钟有没有配好?

嗯,这一章的内容就到这里。下一章我们开始讲GPIO的深入应用,到时候我会分享一些我在项目中用到的实用技巧。