2. ARM Cortex-M体系结构基础

说实话,很多初学者一上来就急着写代码,结果卡在环境搭建上大半天。我见过不少同事,工具链没配好就开干,最后发现是编译器版本不对、调试器连不上,白白浪费一整天。这一章,咱们就把这些坑提前填上。

2.1 工具链全景:你需要哪些软件?

在动手之前,先搞清楚我们要装哪些东西。别急着下载,先看这张图,心里有个谱。

STM32 开发环境工具链全景 Keil MDK (IDE) STM32CubeMX (配置) ARM Compiler (编译) 调试器驱动 (DAP/JLink) 初始化代码 (.c/.h) 可执行文件 (.hex/.axf) 调试会话 💡 工作流程: CubeMX 生成初始化代码 → Keil 编译链接 → 调试器下载并在线调试

简单说,你需要三样东西:Keil MDK(写代码、编译、下载)、STM32CubeMX(图形化配置外设)、调试器驱动(让电脑和开发板说话)。缺一个,你的板子就点不亮。

2.2 Keil MDK 安装与破解

2.2.1 下载与安装

去 Keil 官网下载 MDK-ARM 最新版。注意,别下成 C51 版本,那是给 8051 用的。我见过有人装错了,折腾半天找不到 STM32 芯片选项。

安装步骤很简单,一路 Next 就行。但有几点要注意:

  • 安装路径不要有中文。我习惯用 C:\Keil_v5,清爽好找。
  • 安装时勾选所有器件支持包。如果漏了,后面还得手动补。
  • 安装完成后重启电脑。环境变量才能生效。

💡 我的习惯:装完 Keil 后,第一时间打开软件,点 Pack Installer,把 STM32F1/F4/F7 的器件包全装上。省得后面编译时报错说找不到芯片。

2.2.2 破解(注册)

Keil MDK 不破解的话,代码大小限制在 32KB 以内。做个小实验还行,真干活肯定不够。

破解工具网上很多,但要注意:

  1. 以管理员身份运行 Keil,然后点 File → License Management。
  2. 复制 CID 码,粘贴到破解工具里。
  3. 选择 ARM 编译器(别选错成 C51)。
  4. 生成 License,粘贴回 Keil,点 Add LIC。

⚠️ 重要提醒:我曾经因为杀毒软件把破解工具当病毒删了,折腾了半小时。建议暂时关闭实时防护,或者把破解工具加入白名单。另外,破解仅供个人学习,商业项目请购买正版。

破解成功后,License Management 窗口会显示有效期到 2032 年。嗯,够你用到退休了。

2.3 STM32CubeMX 配置

STM32CubeMX 是 ST 官方的图形化配置工具。说白了,就是帮你自动生成初始化代码,省得你对着寄存器手册一行行敲。

2.3.1 安装 CubeMX

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

  • 需要 Java 运行环境。如果电脑没装 Java,CubeMX 会报错。装个 JDK 8 或 11 就行。
  • 安装路径同样不要有中文。
  • 首次启动会下载固件包。选你用的芯片系列,比如 STM32F103C8,下载对应的 HAL 库。

2.3.2 创建一个新工程

打开 CubeMX,点 New Project,在 Part Number 里搜索你的芯片。我以最常见的 STM32F103C8T6 为例。

选中芯片后,进入配置界面。这里你会看到芯片的引脚图,所有外设一目了然。咱们先配一个最简单的:串口。

步骤 操作 说明
1 点击 USART1,模式选 Asynchronous 异步串口,最常用
2 在 Configuration 里设置波特率 115200 数据位 8,停止位 1,无校验
3 点击 GPIO Settings,确认 TX/RX 引脚 PA9 (TX), PA10 (RX)
4 点击 Project Manager,设置工程名和路径 IDE 选 MDK-ARM V5
5 点击 GENERATE CODE 生成初始化代码

🔑 关键点:CubeMX 生成的代码基于 HAL 库。你不需要自己写 GPIO、时钟、串口的初始化函数。它全帮你搞定了。你只需要在 main.c 里写业务逻辑。

2.4 串口驱动与调试器连接

2.4.1 安装串口驱动

市面上大多数 STM32 开发板用的是 CH340 或 CP2102 芯片做 USB 转串口。你需要安装对应的驱动。

怎么判断?看板子上的 USB 口旁边的小芯片。如果是 CH340G,去网上搜 CH340 驱动。如果是 CP2102,搜 CP210x 驱动。

装好后,插上 USB 线,打开设备管理器,在 端口 (COM 和 LPT) 下应该能看到 USB Serial Port (COMx)。记下这个 COM 号,后面要用。

⚠️ 避坑指南:我曾经遇到一个情况,驱动装好了,设备管理器里也看到了,但串口工具就是打不开。后来发现是 USB 线的问题——有些线只能充电,不能传数据。换一根带数据功能的线就好了。

2.4.2 调试器连接

调试器是连接电脑和开发板的桥梁。最常用的是 ST-Link(ST 官方)和 J-Link(SEGGER)。

连接方式很简单:

  • SWD 接口:只需要 4 根线——SWDIO、SWCLK、GND、3.3V。
  • JTAG 接口:需要 5 根线,现在用得少了。

我个人习惯用 SWD,省引脚,够用。接线如下:

调试器引脚 开发板引脚 说明
SWDIO PA13 (SWDIO) 数据线
SWCLK PA14 (SWCLK) 时钟线
GND GND 共地
3.3V 3.3V 供电(可选)

2.4.3 在 Keil 里配置调试器

打开 Keil,点 Project → Options for Target,切换到 Debug 选项卡:

  1. 选择 ST-Link Debugger 或 J-Link / J-Trace。
  2. 点 Settings,确认 SWD 模式,Max Clock 选 4MHz(别太高,容易不稳定)。
  3. 点 Flash Download,勾选 Reset and Run。这样下载完程序后,芯片会自动复位运行。

💡 我的经验:如果 Keil 提示 No ST-Link detected,先检查驱动。ST-Link 的驱动通常和 Keil 一起装了。如果还不行,试试换一个 USB 口,或者重启一下开发板。我遇到过好几次,其实就是接触不良。

2.5 验证:点亮你的第一个 LED

环境搭好了,咱们跑个最简单的程序验证一下。用 CubeMX 配一个 GPIO 输出,控制板子上的 LED。

在 CubeMX 里:

  • 选一个 GPIO 引脚(比如 PC13,很多板子上的 LED 接这个脚),模式设为 Output Push Pull。
  • 生成代码,在 main.c 的 while(1) 里加一句:
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(500);  // 延时 500ms

编译、下载。如果 LED 以 1 秒的频率闪烁,恭喜你,环境搭建成功了!

✅ 到这里,你已经完成了:

  • Keil MDK 的安装与破解
  • STM32CubeMX 的配置与代码生成
  • 串口驱动的安装
  • 调试器的连接与配置

接下来,就可以正式开始写代码了。