- 操作系统
- 嵌入式
- 物联网
- 嵌入式OS
- RTOS
【免费下载链接】rt-thread
RT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/
本篇技术指南以 RT-Thread 开源仓库中 CH32V208W-R0 板级支持包(BSP)的官方英文上手指南为主体,系统讲解如何基于 WCH 沁恒 CH32V208WBU6(RISC-V 内核,最高主频 144MHz)开发板,完成「RT-Thread Studio 工程导入 → 驱动开关配置 → ESP8266 AT 模组联网 → RTduino 生态兼容层使用」的完整开发链路。读完本文,你将掌握 RT-Studio 环境下导入并编译 BSP 的标准流程、使用图形化配置开关组合片上外设的方法,以及通过 AT 组件 + UART2 让开发板接入 Wi-Fi 的完整实操方案。
1 开发板与 BSP 概况
CH32V208W-R0 是 WCH 推出的基于 RISC-V 内核的开发板,属于 RT-Thread 仓库bsp/wch/risc-v目录下的官方 BSP 之一,同目录还包含 ch32v103r-evt、ch32v307v-r1、ch569w-evt 等兄弟板卡,其 BSP 结构与驱动框架可以互相参考。板级支持包的位置为 bsp/wch/risc-v/ch32v208w-r0,随板卡发布的说明文档 readme.md(中文)与 README_EN.md(英文)共同构成了本指南的主体。
根据 readme.md 中的官方描述,该开发板基本特性如下:
| 项目 | 说明 |
|---|---|
| MCU | CH32V208WBU6,RISC-V 内核,主频最高 144MHz,FLASH/RAM 容量可配置 |
| LED | 2 个(注意:板载 LED 默认不与管脚直接连接,需自行用杜邦线引出) |
| 按键 | 3 个(Download、Reset、User) |
| USB | 2 个 |
| 网口 | 1 个,内置 10M PHY(以太网控制器位于芯片内部) |
| 调试 | 板上无 WCH-Link 下载调试工具,需外接 |
| 编译器 | 已测试 WCH RISC-V GCC 8.2.0 |
在 RT-Thread 驱动框架层面,BSP 的硬件抽象由 board/board.c 与 board/board.h 承担:rt_hw_board_init()中完成 SysTick 配置(SystemCoreClock / RT_TICK_PER_SECOND,即 144MHz/1000)、串口驱动初始化rt_hw_usart_init()、控制台设备绑定rt_console_set_device("uart1")、PIN 驱动初始化rt_hw_pin_init(),并调用rt_components_board_init()完成板级组件初始化。BSP 默认配置存放于 rtconfig.h,其中RT_CONSOLE_DEVICE_NAME被定义为"uart1",即串口 1 作为系统控制台输出。
2 准备阶段
根据 README_EN.md 的第 1 节,动手前需要准备以下三样东西:
- RT-Thread 源码仓库:将 RT-Thread 的 GitHub 仓库拉取到本地(可使用
git clone,对网络不友好的环境可通过镜像方式获取)。 - RT-Thread Studio 集成开发环境:下载并安装 RT-Thread Studio(RT-Thread 官方出品的嵌入式 IDE,内置 ENV 配置、编译、下载与调试工具链)。CH32V208W-R0 的 BSP 明确支持 RT-Studio 工程,本指南即以 RT-Studio 环境为例展开。
- ESP8266 模块:用于后续联网实操的 Wi-Fi 模组。
若你希望绕开 IDE、直接用命令行构建,readme.md 也提供了完整的 Env 工具链方案:安装/解压 MounRiver Studio 工具链后,设置环境变量RTT_EXEC_PATH指向wch-riscv-none-elf-gcc-8/bin,依次执行scons --pyconfig-silent、pkgs --update、scons -j4,编译完成后会在工程根目录生成rtthread.bin文件;还支持scons --target=cmake+ CLion、scons --target=vsc+ VSCode 等替代开发方式。初次导入 RT-Studio 前建议先用 Env 方式编译一次以拉取 SDK 依赖(pkgs --update)。
3 导入 BSP 到 RT-Thread Studio
3.1 导入工程
打开 RT-Thread Studio 后,按以下步骤将 BSP 导入工作空间:
- 点击菜单File(文件)→ Import(导入);
- 在导入向导中选择RT-Thread BSP 到工作空间中(Import RT-Thread BSP into the workspace);
- 填写工程信息,BSP 根目录指向
bsp/wch/risc-v/ch32v208w-r0,其余信息按照示例填写即可。
导入完成后,工程根目录下会携带参考文档(readme),可先按 readme.md 进行基础配置。
3.2 选择 newlib 以减小内存占用
链接时若添加标准库,会带来明显的固件体积与内存增长。为了降低内存占用,文档推荐在工程配置中选择newlib(相对于完整标准库更精简的 C 运行库实现)。具体操作:在 RT-Studio 的工程属性/构建设置中找到库选择项,切换为 newlib 并保存设置。这是 RISC-V 嵌入式工程中常见的省内存手段,尤其适合 FLASH/RAM 受限的 MCU 场景。
3.3 编译工程
点击编译选项按钮执行构建,编译结果窗口显示工程编译通过即代表准备阶段完成。此后每次改动配置(驱动开关、软件包开关)后重新编译即可生成新的固件。
4 使用 RT-Studio 配置 BSP 驱动
RT-Thread 的每个 BSP 都预先适配了若干片上外设驱动与板载外设驱动,使用 RT-Studio 的 RT-Thread Settings 界面打开对应开关、并按使用环境配置参数即可生效。需要注意:由于芯片管脚存在复用功能,并非所有片上外设驱动与板载外设驱动可以同时开启,必须结合开发板原理图合理选择外设组合。
以本 BSP 的驱动菜单 board/Kconfig 为例,图形化配置背后映射的开关体系包括:
- On-chip Peripheral Drivers(片上外设):
- GPIO:
BSP_USING_GPIO(默认开启,并选中RT_USING_PIN,对应 main.c 中rt_pin_get("PA.0")的使用方式); - UART1 ~ UART8:
BSP_USING_UARTx(默认全部关闭,需按需打开;UART1 为控制台串口); - ADC1/ADC2 及内部温度、内部 Vref 通道(CH16/CH17);
- DAC 双通道;
- 软件 I2C 总线 swi2c1/swi2c2(含 SCL/SDA 管脚号配置,默认如 swi2c1 使用 pin 38/39);
- SPI1 ~ SPI3 及软件 SPI swspi1/swspi2(含 SCK/MISO/MOSI 管脚号,默认 swspi1 为 25/23/24);
- RTC(可选 LSI 或 LSE 时钟源,
LSI_VALUE默认 40000); - IWDT 看门狗、CAN1/CAN2、TIM1~TIM10(每个定时器可选择作为 clock_timer 时钟源或 PWM 输出,PWM 模式下再细分 CH1~CH4 通道)。
- GPIO:
- Onboard Peripheral Drivers(板载外设):目前板上仅提供
BSP_USING_ARDUINO(RTduino 生态兼容开关),开启后会自动联动选择 GPIO、ADC、TIM/PWM 等一批依赖驱动,详见下文第 6 节。
RT-Thread 还拥有丰富的软件包生态(AT 设备、网络协议栈、传感器库、图形界面等)。在 RT-Studio 的 RT-Thread Settings 中打开对应软件包开关,即可将软件包自动加入工程参与编译,无需手动移植源码。
5 联网实操:ESP8266 模组 + AT 组件
ESP8266 是面向物联网应用的高性价比、高度集成的 Wi-Fi MCU,也可单独作为 Wi-Fi 透传模块使用,通常支持AT 指令操作方式。RT-Thread 为这类支持 AT 指令的模组提供了统一的抽象层——AT 组件,屏蔽了不同模组 AT 指令集的差异,向上提供标准网络接口。本节将完整走通「AT 组件 ↔ 串口 ↔ ESP8266」的联网链路。
5.1 配置板载 UART 外设(使能 UART2)
AT 组件与 ESP8266 模组之间采用串口通信,控制台已占用 UART1,因此需要再使能一路串口,本 BSP 选用UART2。串口驱动在 BSP 中已默认实现,只需在 RT-Studio 的 RT-Thread Settings 中打开Enable UART2开关(对应 Kconfig 中的BSP_USING_UART2),然后按Ctrl + S保存设置,串口 2 即被初始化。
5.2 使用 RT-Studio 配置 AT 组件
- 点击左侧RT-Thread Settings选项,弹出右侧配置菜单;
- 在搜索栏输入
AT,选择AT 设备(AT device)并启用; - 选择设备类型为ESP8266,然后配置以下参数:
- AT 设备对应的串口名称:选择刚使能的
uart2; - 串口波特率等通信参数(按 ESP8266 模组实际配置,常见 115200);
- Wi-Fi 名称(SSID)与密码:填写你希望连接的无线路由器凭据。
- AT 设备对应的串口名称:选择刚使能的
保存设置后,AT 设备组件会被加入工程,重新编译即生效。
5.3 ESP8266 模组接线
按文档给出的硬件连接方式接线(使用杜邦线):
| 开发板管脚 | 模组管脚 |
|---|---|
| PA2 | RX |
| PA3 | TX |
| 开发板引出的电源管脚 | VCC/GND(为模组供电) |
注意 PA2/PA3 正是 UART2 的默认复用引脚,这也印证了 5.1 节选择 UART2 的原因——串口编号与管脚复用关系一一对应,配置外设时必须结合原理图核对管脚复用。
5.4 使能内核调试功能观察初始化过程
为了更直观地观察组件初始化与网络连接过程,可以在 RT-Thread Settings 中打开**内核调试(kernel debug)**选项(调试完成后可关闭以节省输出开销)。重新编译并烧录固件后,在串口终端(115200-8-1-N)中可以看到 RT-Thread 的启动 banner、组件初始化日志以及 AT 设备与 Wi-Fi 的连接过程输出。
5.5 Wi-Fi 联网测试
由于 5.2 节已在 AT 设备配置中写入了 Wi-Fi 的 SSID 与密码,系统启动后 ESP8266 会自动完成连接。在 RT-Thread 的 FinSH/MSH shell 中执行:
ping www.baidu.com若 shell 输出类似64 bytes from ...的回复数据,则说明 ESP8266 模组联网成功,RT-Thread 的 lwIP 网络栈已通过 AT 设备获得可用的网络通路。
6 RTduino 组件:兼容 Arduino 生态
RTduino是 RT-Thread 实时操作系统的 Arduino 生态兼容层,属于 RT-Thread 社区的子项目、Arduino 开源项目的下游工程,目标是兼容 Arduino 社区生态以丰富 RT-Thread 的软件包生态(例如数千种分类齐全的 Arduino 库以及社区优秀开源项目),并显著降低 RT-Thread 操作系统及适配芯片的学习门槛。
6.1 配置 RTduino
在 RT-Thread Settings 的**板载设备驱动(Onboard Peripheral Drivers)**中打开RTduino选项,对应 board/Kconfig 中的BSP_USING_ARDUINO。该开关会自动select PKG_USING_RTDUINO,并联动打开 GPIO、ADC1、TIM1/TIM3/TIM4 的 PWM 通道、RTDUINO_USING_WIRE(I2C)等依赖项,同时imply RTDUINO_USING_SERVO。按Ctrl + S保存后,RTduino 软件包即被加入工程。
6.2 使用 RTduino 编写应用
启用 RTduino 后,工程中会生成 applications/arduino_main.cpp,其中包含 Arduino 开发者熟悉的setup()与loop()入口,可以像使用官方 Arduino 开发板一样编写逻辑。仓库中默认的示例代码如下:
#include <Arduino.h> void setup(void) { /* put your setup code here, to run once: */ pinMode(LED_BUILTIN, OUTPUT); } void loop(void) { /* put your main code here, to run repeatedly: */ digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); delay(100); }工程默认执行一个LED 闪烁功能:setup()中将板载 LED 引脚配置为输出,loop()中每 100ms 翻转一次 LED 电平。
管脚别名映射定义在 applications/arduino_pinout/pins_arduino.h:
- 数字引脚
D0 ~ D15、模拟引脚A0 ~ A5按顺序映射到芯片管脚; LED_BUILTIN定义为D8;F_CPU定义为144000000L,与 144MHz 主频一致;- RTduino 串口
Serial1复用uart1(PA9-TX / PB0-RX),管脚布局参考同目录下的ch32v208w-pinout.png引脚图。
需要特别提醒:ch32v208w-r0 这块板子的板载 LED 默认不与管脚直接连接,用户使用 LED 时需要用杜邦线手动将 LED 与控制管脚连接起来,之后才能看到闪烁现象。这与 main.c 中通过rt_pin_get("PA.0")驱动 LED0 的方式可互为对照——原生 RT-Thread 方式使用 PIN 设备 API,RTduino 方式则使用pinMode/digitalWrite抽象,二者最终都落到同一套 GPIO 驱动上。
至此,ch32v208w-r0 的基础环境便搭建与测试完毕:从 RT-Studio 导入编译、驱动开关组合配置,到 ESP8266 联网验证,再到 RTduino 生态应用开发,整条 RT-Thread BSP 开发链路均可复用到同系列其他 RISC-V 板卡上。
7 常见问题与要点速查
| 现象 / 需求 | 处理要点 |
|---|---|
| 编译通过但控制台无输出 | 确认串口工具参数为 115200-8-1-N,且连接的是 UART1 对应管脚 |
| AT 组件收不到模组应答 | 检查 PA2/PA3 与模组 RX/TX 是否交叉连接、模组供电是否正常、波特率是否一致 |
| 外设同时启用冲突 | 核对 board/Kconfig 中各外设默认管脚,结合原理图避免复用冲突 |
| LED 不亮 | 该板载 LED 未直接连接管脚,需用杜邦线手动连接控制引脚 |
| 希望减小固件体积 | 工程配置中改用 newlib(见 3.2 节) |
| 需要命令行构建 | 使用 Env:设置RTT_EXEC_PATH后执行scons --pyconfig-silent && pkgs --update && scons -j4,产物为rtthread.bin,详见 readme.md |
- 操作系统
- 嵌入式
- 物联网
- 嵌入式OS
- RTOS
【免费下载链接】rt-thread
RT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/
相关推荐
RT-Thread 在 CH32V208W-R0(RISC-V)开发板上的完整上手指南:Env 编译、RT-Studio 配置与 ESP8266 联网实战
RT Thread 在 CH32V208W R0(RISC V)开发板上的完整上手指南:Env 编译、RT Studio 配置与 ESP8266 联网实战 本篇
操作系统嵌入式物联网嵌入式OSRTOSRT-Thread BSP xmc7100d-f144k4160aa 的 Arduino 生态兼容(RTduino)实战指南
RT Thread BSP xmc7100d f144k4160aa 的 Arduino 生态兼容(RTduino)实战指南 本篇技术指南以 RT Thread
操作系统嵌入式物联网嵌入式OSRTOSRT-Thread BSP 实战:MIMXRT1060-EVK 开发板快速上手与 RW007 WiFi 联网指南
RT Thread BSP 实战:MIMXRT1060 EVK 开发板快速上手与 RW007 WiFi 联网指南 本篇技术指南围绕 RT Thread 开源仓库
操作系统嵌入式物联网嵌入式OSRTOS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考