【STM32】CubeMX(十三):RT-THREAD
本篇博客描述的是 RT-Thread + STM32 + CubeMX 的使用方法。本文也为大家提供了基于 STM32 使用 CubeMX 添加 RT-Thread 并创建闪烁 LED 任务 的操作流程。 便于您更好的理解。
一、RT-Thread 是什么?
RT-Thread 是一个开源、轻量级的实时操作系统,适用于嵌入式设备(简单点可以理解它是一个国产版本的 FreeRTO,专为单片机设计的轻量级实时操作系统),具有以下特点:
特性 | 说明 |
---|---|
多任务调度 | 支持抢占式调度、优先级管理 |
组件丰富 | 包含 shell、消息队列、定时器、内存管理等 |
可视化配置 | 支持 CubeMX 快速集成使用 |
支持 CMSIS | 与 STM32 HAL/CubeMX 无缝结合 |
🛠️ 二、CubeMX 添加 RT-Thread 的完整步骤
这里是 RT-Thread 安装包的链接 和 在CubeMX中安装RT-THREAD的操作步骤:
包的链接:
https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
操作步骤:
https://blog.csdn.net/qq_36075612/article/details/107309750
✅ 步骤 1:创建空白工程
选择芯片型号(如 STM32F103RCTx),创建空白工程。
✅ 步骤 2:安装 RT-Thread 软件包
📌 在 CubeMX 中依次点击:
Clock Configuration > Software Packs > Manage Software Packs
✅ 步骤 3:添加 RT-Thread 的 PDSC 链接
输入链接地址:
https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
点击 Check
→ OK → 等待安装完成。
✅ 步骤 4:启用 RT-Thread 组件
点击:
Software Packs > Select Components
✔ 勾选:
RTOS RT-Thread > kernel
- (可选)
device drivers、shell
等组件
然后我们配置一个点灯功能,点击进入 Select Components
这里我选择的 3.1.1 的版本(你也可以使用其他版本)
✅ 步骤 5:配置 RT-Thread 参数
在左侧导航栏中,点击 RealThread.RT-Thread.x.x.x
可修改参数(如主线程栈大小、最大优先级数、启用主线程等)
✅ 步骤 6:配置 GPIO(LED)
例如:配置 PC7 为输出模式,控制 LED。
此处要注意配置的时钟 和 SysTick 可能会出现冲突。如果出现这种情况,你可以把时钟源改一下即可。
✅ 步骤 7:生成代码
设置 Timebase 为 TIM6(推荐)
点击右上角 GENERATE CODE
生成工程。
三、添加 RT-Thread 线程控制 LED(代码部分)
生成工程后,在 applications/main.c
中添加你的线程任务:
LED 闪烁线程
📄 main.c
#include <rtthread.h>
#include "main.h" // 包含 HAL 库函数#define LED_PIN GPIO_PIN_7
#define LED_PORT GPIOC/* 线程控制块和栈 */
static rt_thread_t led_thread = RT_NULL;/* 线程入口函数 */
void led_blink_thread_entry(void *parameter)
{while (1){HAL_GPIO_TogglePin(LED_PORT, LED_PIN);rt_thread_mdelay(500); // 延时500ms}
}/* main 函数 */
int main(void)
{/* 初始化 HAL 库 */HAL_Init();SystemClock_Config();/* 初始化 GPIO */MX_GPIO_Init();/* 创建线程 */led_thread = rt_thread_create("led",led_blink_thread_entry,RT_NULL,512, // 栈大小10, // 优先级10); // 时间片if (led_thread != RT_NULL)rt_thread_startup(led_thread);/* 启动 RT-Thread 内核 */rtthread_startup();return 0;
}
运行效果
- 编译后烧录程序
- LED(PC7)每 500ms 亮灭一次
- 如果使用串口 + FinSH,可扩展 shell 控制
一些问题排查
编译找不到 rtthread.h 检查是否启用了 RT-Thread kernel
LED 不亮 检查 GPIO 是否配置为输出,是否接 LED
main.c 没有执行 需启用 use user main 选项
多线程冲突 调整线程优先级 & 栈大小,防止溢出
相比于 freeRTOS,CubeMX 配合 RT-Thread 软件包可以快速构建基于 STM32 的实时多任务系统,适用于 LED 控制、传感器采集、串口通信等等多种的应用场景。
当然,你也可以直接使用 RT-Thread 的官网版本
RT-Thread 的官网版本:https://github.com/RT-Thread/rt-thread
RT-Thread env工具:https://www.rt-thread.org/download.html#download-rt-thread-env-tool
RT-Thread Studio IDE(图形开发):https://www.rt-thread.org
RT-Thread文档中心:https://www.rt-thread.org/document/site/#/development-tools/env/env
如果不想麻烦去找,也可以在我的资源中直接下载即可,我为大家准备了:嵌入式系统开发】RT-Thread env工具用户手册
这是使用 RT-Thread 官方版本 + Env 工具在 STM32 上创建一个最小工程,实现 LED 闪烁任务(不依赖 CubeMX),主要介绍了从下载、配置、工程生成到编写任务代码,全流程操作。
准备工作
✅ 1. 下载 RT-Thread 官方源码
GitHub 地址:https://github.com/RT-Thread/rt-thread
你可以用 Git 克隆 或 直接在官网下载 ZIP 解压。:
git clone https://github.com/RT-Thread/rt-thread.git
✅ 2. 安装 RT-Thread Env 工具
官网下载:https://www.rt-thread.org/download.html#download-rt-thread-env-tool
文档教程:RT-Thread Env 文档
Env 是 RT-Thread 官方的命令行配置工具,主要功能包括:
- 创建 BSP 工程
- 配置
.config
- 编译、烧录、清理工程
✅ 3. 安装编译工具链
Windows 推荐安装:Keil MDK 或 GCC ARM
推荐使用 RT-Thread Studio 图形开发环境(可选)
创建 LED 闪烁工程(基于 STM32F103)
✅ 1. 打开 env.exe
(CMD 窗口)
进入 RT-Thread
根目录,运行:
cd rt-thread\bsp\stm32
创建一个基于 STM32F103 的模板工程(如使用 stm32f103-nucleo
或 stm32f103-atk-nano
):
cd stm32f103-atk-nano
menuconfig
🚨 若无 menuconfig
命令提示,需执行一次 scons --menuconfig
或配置 python 环境变量。
✅ 2. 使能 LED 引脚和线程调度
在 menuconfig
中打开以下选项:
RT-Thread Kernel
→Using main thread
Hardware Drivers Config
→Enable GPIO
保存并退出(保存为 .config
文件)
✅ 3. 编译工程
scons
成功后会生成 .elf
, .bin
, .hex
等文件,准备烧录。
添加 LED 闪烁线程代码
修改路径至:applications/main.c
✅ 根据点灯的业务逻辑编写代码如下:
#include <rtthread.h>
#include <board.h> // 包含 LED 引脚宏定义#define LED_PIN GET_PIN(C, 13) // 以 PC13 为例(蓝色小板)static void led_blink(void *parameter)
{rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);while (1){rt_pin_write(LED_PIN, PIN_LOW);rt_thread_mdelay(500); // 延时500msrt_pin_write(LED_PIN, PIN_HIGH);rt_thread_mdelay(500);}
}int main(void)
{// 创建线程rt_thread_t tid = rt_thread_create("led",led_blink,RT_NULL,512,10,10);if (tid != RT_NULL)rt_thread_startup(tid);return 0;
}
最后,编译和烧录验证
使用 ST-Link + STM32CubeProgrammer
或 Keil
烧录 .hex
文件,运行后:
- PC13 引脚连接的 LED 会以 500ms 闪烁周期亮灭
- 若使用 ATK 板或其他外设板,请根据实际修改引脚
扩展功能:
FinSH Shell: 打开
menuconfig
启用 shell(命令行)
UART 输出日志: 打开RT_USING_CONSOLE
并配置串口
软件定时器: 使用rt_timer
实现定时任务
消息队列: 使用rt_mq
实现任务通信
综上所述,使用 RT-Thread 官网版本 + Env 工具,可快速构建跨平台、轻量级的嵌入式 RTOS 工程,在 STM32 上实现 LED 控制、串口通信、任务调度等功能,这种方式可以完全脱离 CubeMX 来实现。
以上,欢迎有从事同行业的电子信息工程、互联网通信、嵌入式开发的朋友共同探讨与提问,我可以提供实战演示或模板库。希望内容能够对你产生帮助!