【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 中依次点击:

bash 复制代码
Clock Configuration > Software Packs > Manage Software Packs


✅ 步骤 3:添加 RT-Thread 的 PDSC 链接

输入链接地址:

c 复制代码
https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc

点击 Check → OK → 等待安装完成。

✅ 步骤 4:启用 RT-Thread 组件

点击:

bash 复制代码
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

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 解压。:

c 复制代码
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 根目录,运行:

c 复制代码
cd rt-thread\bsp\stm32

创建一个基于 STM32F103 的模板工程(如使用 stm32f103-nucleostm32f103-atk-nano):

c 复制代码
cd stm32f103-atk-nano
menuconfig

🚨 若无 menuconfig 命令提示,需执行一次 scons --menuconfig 或配置 python 环境变量。

✅ 2. 使能 LED 引脚和线程调度

menuconfig 中打开以下选项:

  • RT-Thread KernelUsing main thread
  • Hardware Drivers ConfigEnable GPIO

保存并退出(保存为 .config 文件)

✅ 3. 编译工程
c 复制代码
scons

成功后会生成 .elf, .bin, .hex 等文件,准备烧录。


添加 LED 闪烁线程代码

修改路径至:applications/main.c

✅ 根据点灯的业务逻辑编写代码如下:

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);  // 延时500ms
        rt_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 + STM32CubeProgrammerKeil 烧录 .hex 文件,运行后:

  • PC13 引脚连接的 LED 会以 500ms 闪烁周期亮灭
  • 若使用 ATK 板或其他外设板,请根据实际修改引脚

扩展功能:

FinSH Shell: 打开 menuconfig 启用 shell (命令行)

UART 输出日志: 打开 RT_USING_CONSOLE 并配置串口

软件定时器: 使用 rt_timer 实现定时任务

消息队列: 使用 rt_mq 实现任务通信

综上所述,使用 RT-Thread 官网版本 + Env 工具,可快速构建跨平台、轻量级的嵌入式 RTOS 工程,在 STM32 上实现 LED 控制、串口通信、任务调度等功能,这种方式可以完全脱离 CubeMX 来实现。

以上,欢迎有从事同行业的电子信息工程、互联网通信、嵌入式开发的朋友共同探讨与提问,我可以提供实战演示或模板库。希望内容能够对你产生帮助!

相关推荐
玩转以太网2 小时前
基于 W55MH32Q-EVB 实现 FatFs 文件系统+FTP 服务器
服务器·单片机·物联网
小郝 小郝2 小时前
【51单片机】萌新持续学习中《矩阵 密码锁 点阵屏》
嵌入式硬件·学习·51单片机
源远流长jerry5 小时前
STM32之DMA详解
linux·网络·c++·stm32·单片机·嵌入式硬件
专属熊熊先生6 小时前
Allegro17.4导出带有NET的PDF文档及组装样式图
笔记·嵌入式硬件·学习
小李飞刀李寻欢6 小时前
MongoDB /redis/mysql 界面化的数据查看页面App
redis·mysql·mongodb
小小少年1238 小时前
基于51单片机的DS18B20大棚温度监控系统
stm32·单片机·嵌入式硬件
北极有牛8 小时前
keil添加文件夹
单片机
满目8289 小时前
【Ubuntu系统实战】一站式部署与管理MySQL、MongoDB、Redis三大数据库
数据库·redis·mysql·mongodb·ubuntu·数据库布置
逼子格11 小时前
【Protues仿真】定时器
单片机·嵌入式硬件·51单片机·定时器·硬件工程师·硬件工程师真题·at89c52