本篇博客描述的是 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 來實現。
以上,歡迎有從事同行業的電子信息工程、互聯網通信、嵌入式開發的朋友共同探討與提問,我可以提供實戰演示或模板庫。希望內容能夠對你產生幫助!