第二章 开发环境搭建:Keil MDK与STM32CubeMX的安装配置
好,咱们正式开始动手了。做嵌入式开发,第一件事就是把家伙事儿备齐。我见过不少新手,上来就急着写代码,结果编译报错半天找不到原因——最后发现是工具链没装对。嗯,咱们别走这个弯路。
2.1 Keil MDK的安装与配置
Keil MDK,说白了就是ARM内核MCU的标配IDE。我个人习惯用MDK-ARM V5.38版本,这个版本对STM32F4的支持最稳定。你可能会问,为什么不用最新版?我在项目中遇到过,新版对某些老型号的芯片支持反而有兼容性问题。
安装步骤:
- 从ARM官网下载MDK-ARM安装包(约1.2GB)
- 双击安装,路径不要有中文和空格
- 安装完成后,打开Keil uVision5
- 点击
Pack Installer图标,安装STM32F4系列器件包
这里有个坑,我提醒你一下。Pack Installer下载速度很慢,有时候还会断。我曾经等了一个小时没反应,后来发现可以手动下载离线包。你到Keil官网的 Device Pack 页面,找到 Keil.STM32F4xx_DFP.2.17.1.pack,下载后双击安装就行。
我的小技巧:安装完成后,在Keil里配置一下编辑器字体。我个人习惯用 Consolas 12号,看代码不费眼。设置路径:Edit → Configuration → Colors & Fonts。
2.2 STM32CubeMX的安装与配置
STM32CubeMX是ST官方出的图形化配置工具。说白了,就是帮你自动生成初始化代码的。你想想看,以前配置一个定时器要翻半天手册,现在点几下鼠标就搞定了。
安装很简单,去ST官网下载 STM32CubeMX-Win.zip,解压后运行 SetupSTM32CubeMX.exe。注意,这个工具需要Java运行环境,如果你的电脑没有JRE,它会自动帮你装。
重要提醒:CubeMX生成的代码默认用的是HAL库。但咱们后面要集成FreeRTOS和MCAL,所以生成代码时记得勾选 Generate peripheral initialization as a pair of .c/.h files。这个选项能让代码结构更清晰,方便我们后续手动修改。
我第一次用CubeMX时,犯过一个低级错误。生成代码后直接编译,结果报了一堆错。后来发现是时钟配置没设对。STM32F407最高主频168MHz,但默认配置可能只给了16MHz。你记得在 Clock Configuration 页面,把HCLK调到168MHz。
2.3 GCC工具链的安装
为什么还要装GCC?因为FreeRTOS的某些组件,还有MCAL的代码,用GCC编译更顺手。Keil虽然也能编译,但有些开源库对ARMCC的支持不太好。
我推荐用 ARM GNU Toolchain,版本选 10.3-2021.10 或更新。安装步骤:
- 下载
gcc-arm-none-eabi-10.3-2021.10-win32.exe - 安装到
C:\ARM_GCC(路径不要有空格) - 把
C:\ARM_GCC\bin添加到系统环境变量PATH中
验证是否装好,打开命令行输入:
arm-none-eabi-gcc --version
如果看到版本信息,就说明成功了。我记得有一次装完忘了加环境变量,折腾了半天才发现是路径没配好。嗯,这种小细节最容易出问题。
2.4 调试器驱动安装(J-Link / ST-Link)
调试器,说白了就是连接电脑和开发板的桥梁。没有它,你写的代码就没办法下载到芯片里跑。
2.4.1 ST-Link驱动
如果你用的是STM32官方开发板(比如STM32F4 Discovery),板载的就是ST-Link。驱动安装很简单:
- 插上开发板,Windows会自动识别
- 如果没识别,去ST官网下载
ST-Link USB driver - 安装后,在设备管理器里能看到
STMicroelectronics STLink dongle
避坑指南:我曾经遇到过ST-Link驱动装好了,但Keil里还是识别不到。后来发现是USB线的问题——有些便宜的数据线只能充电,不能传数据。换一根好点的USB线就好了。
2.4.2 J-Link驱动
J-Link是SEGGER公司的调试器,比ST-Link稳定,调试速度也更快。我个人习惯用J-Link做正式项目,ST-Link只用来做快速验证。
安装步骤:
- 去SEGGER官网下载
J-Link Software and Documentation Pack - 安装时选择
Install USB driver for J-Link - 安装完成后,插上J-Link,系统会自动装驱动
验证方法:打开 J-Link Commander,输入 connect,选择芯片型号 STM32F407VG,如果显示连接成功,就说明一切正常。
注意:J-Link有盗版和正版之分。盗版J-Link用旧版驱动(V6.x以下)没问题,但升级到新版驱动(V7.x以上)可能会被锁。我在项目里吃过这个亏,后来老老实实买了正版。如果你用的是盗版,建议用V6.44b这个版本,比较稳定。
2.5 环境验证:第一个点灯程序
工具都装好了,咱们跑个点灯程序验证一下。这是嵌入式界的"Hello World"。
打开Keil,新建一个工程,选择STM32F407VG。然后写个最简单的代码:
#include "stm32f4xx.h"
int main(void)
{
// 使能GPIOA时钟
RCC->AHB1ENR |= (1 << 0);
// 配置PA5为推挽输出
GPIOA->MODER |= (1 << 10);
GPIOA->OTYPER &= ~(1 << 5);
while(1)
{
// 点亮LED
GPIOA->BSRR = (1 << 5);
delay(1000000);
// 熄灭LED
GPIOA->BSRR = (1 << 21);
delay(1000000);
}
}
编译通过后,用ST-Link或J-Link下载到开发板。如果看到LED在闪烁,恭喜你,环境搭建成功了!
总结一下:这一章咱们装了Keil MDK、STM32CubeMX、GCC工具链,还有调试器驱动。看起来步骤不少,但每一步都很关键。我建议你装完后,花10分钟跑一遍点灯程序,确认所有工具都能正常工作。后面咱们要搞FreeRTOS和MCAL,基础打牢了,后面才不慌。
下一章,咱们开始讲FreeRTOS在STM32F4上的移植。说实话,移植这块坑也不少,但我会把我在项目中踩过的坑都告诉你。咱们下章见。