2. 开发环境搭建:Keil MDK安装与配置、RT-Thread Studio安装、STM32CubeMX配置、工程模板创建与验证
说实话,很多初学者在RT-Thread上栽跟头,不是因为系统本身多难,而是开发环境没搭利索。工具链版本不对、调试器驱动没装好、工程模板缺文件——这些坑我几乎都踩过。这一章咱们就把地基打牢,后面调试定位才能顺手。
2.1 工具链全景图
先搞清楚我们要装哪些东西,它们各自干什么活。我习惯画一张图来理清关系:
我的建议:不要试图一口气装完所有工具。先装Keil MDK,确认能编译一个裸机工程;再装CubeMX,生成外设配置;最后装RT-Thread Studio。这样每一步出问题都能快速定位。
2.2 Keil MDK 安装与配置
Keil MDK是我们调试的主力工具。我个人习惯用MDK做最终下载和调试,因为它的调试器支持最稳定。
2.2.1 版本选择
| 版本 | 适用场景 | 注意事项 |
|---|---|---|
| MDK v5.36 及以下 | 老项目、兼容旧芯片包 | AC5编译器可用,但AC6支持较弱 |
| MDK v5.37 - v5.38 | 主流新项目 | 默认AC6,需手动安装AC5兼容包 |
| MDK v5.39+ | ARMv8-M新架构 | 已移除AC5,仅AC6 |
避坑指南:我曾经在v5.39上折腾了一整天,发现RT-Thread的某些组件用AC6编译会报奇怪的链接错误。后来换回v5.38,问题消失。如果你刚入门,建议用v5.36或v5.38,社区资源最多。
2.2.2 安装步骤
- 下载安装包:从ARM官网或Keil官网获取MDK安装程序。注意区分32位和64位版本。
- 运行安装:一路Next,但安装路径不要有中文和空格。我习惯装到
C:\Keil_v5。 - 安装芯片包:启动MDK后,通过 Pack Installer 安装对应STM32系列的DFP包。比如STM32F4系列就搜
STM32F4xx_DFP。 - 配置调试器:连接ST-Link或J-Link,在Options for Target → Debug 里选择对应的调试器。我一般用ST-Link,便宜又够用。
- 验证安装:打开一个官方例程,编译通过、下载到板子能跑,就算成了。
关键配置项:
- Project → Options for Target → C/C++ → Optimize: 调试阶段选
-O0或-Og - Debug → Settings → Flash Download: 勾选
Reset and Run - Utilities → Settings: 确认Flash算法正确
2.3 RT-Thread Studio 安装
RT-Thread Studio是官方IDE,集成了Env工具和源码管理。说实话,早期版本bug不少,但现在的4.x版本已经相当稳定了。
2.3.1 下载与安装
- 从RT-Thread官网下载最新版Studio安装包
- 双击安装,选择安装路径(同样不要中文路径)
- 安装完成后会自动下载SDK和工具链,这一步需要联网,大概几百MB
小技巧:如果下载SDK太慢,可以手动从gitee镜像下载后解压到Studio的SDK目录。我在公司内网就是这么干的,省了不少时间。
2.3.2 首次启动配置
- 启动Studio,选择工作空间目录
- 进入
窗口 → 首选项 → RT-Thread,确认SDK路径和工具链路径正确 - 在
RT-Thread Settings视图里可以配置内核、组件和软件包
2.4 STM32CubeMX 配置
CubeMX的作用是生成外设初始化代码和时钟树配置。你想想看,如果手动配时钟,分频系数算错一步,系统就跑不起来。CubeMX把这些可视化之后,省心多了。
2.4.1 工程配置要点
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| 时钟源 | HSE (外部晶振) | 内部HSI精度不够,影响串口波特率 |
| 系统时钟 | 168MHz (F4) / 72MHz (F1) | 根据芯片型号设置最高主频 |
| 调试接口 | Serial Wire (SWD) | 保留SWDIO和SWCLK引脚 |
| USART1 | 115200 8N1 | 用于RT-Thread控制台输出 |
| NVIC | 抢占优先级4位 | RT-Thread默认配置 |
注意:生成代码时,在Project Manager里选择
MDK-ARM V5 作为工具链。别选V4,否则Keil打不开。另外,勾选 Generate peripheral initialization as a pair of .c/.h files per peripheral,这样每个外设独立文件,好维护。
2.5 工程模板创建与验证
这一步最关键。我见过太多人直接拿官方BSP改,结果改得面目全非,出了问题都不知道从哪查。我的做法是:从零创建一个最小模板,只包含必要组件,验证通过后再往上加功能。
2.5.1 使用RT-Thread Studio创建模板
- 打开Studio,点击
文件 → 新建 → RT-Thread 项目 - 选择芯片型号(比如STM32F407ZG)
- 选择
基于芯片创建,不要选基于开发板 - 在
RT-Thread Settings里,只保留内核和finsh组件 - 点击
生成项目
2.5.2 手动整合CubeMX与MDK
如果你习惯用CubeMX生成外设代码,再导入RT-Thread,流程如下:
- CubeMX生成MDK工程,确认外设配置正确
- 将RT-Thread源码复制到工程目录下的
rt-thread/文件夹 - 在Keil里添加RT-Thread的组和源文件
- 修改
board.c,实现rt_hw_board_init()和系统时钟配置 - 修改
rtconfig.h,配置内核参数
验证模板是否可用的三个标准:
- 编译无错误、无警告(至少0 error, 0 warning)
- 下载到板子后,串口能输出RT-Thread的启动Logo
- 在finsh控制台输入
list_thread能看到至少tidle和tshell两个线程
2.5.3 常见问题与解决
| 现象 | 原因 | 解决方法 |
|---|---|---|
编译报 undefined reference to `rt_hw_board_init' |
board.c未添加到工程 | 检查board.c是否在BSP目录下且已加入工程组 |
| 串口无输出 | 控制台UART配置错误 | 检查CubeMX中UART引脚和波特率,与rtconfig.h一致 |
| 下载后程序不运行 | 复位向量表地址不对 | 检查链接脚本中 VECT_TAB_OFFSET 是否匹配Flash起始地址 |
| finsh输入无响应 | 中断优先级配置冲突 | 确保所有外设中断优先级在RT-Thread管理的范围内 |
我的经验:模板验证通过后,记得用Git做一次提交。后面每加一个功能就提交一次,出问题可以快速回退。这个习惯帮我省了不知道多少重装工程的时间。
2.6 本章小结
开发环境搭建看起来琐碎,但每一步都关系到后续调试的效率。Keil MDK负责编译和调试,CubeMX处理外设配置,RT-Thread Studio提供工程框架——三者配合好了,后面写代码、查bug才能顺畅。