RT-Thread 在 GD32VF103V_EVAL(RISC-V 内核)上的 BSP 移植与实践指南
操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载本指南围绕 RT-Thread 仓库中bsp/gd32/risc-v/gd32vf103v-eval这一 BSP 工程展开系统介绍基于兆易创新 GD32VF1 系列评估板主控 GD32VF103VBT6RISC-V 内核、最高主频 108MHz的 RT-Thread 移植、编译下载与进阶外设配置方法。读完本文你将掌握从零将 RT-Thread 跑在这块评估板上、通过 ENV 工具裁剪开启 GPIO/UART/I2C/SPI/ADC 等外设以及结合仓库源码理解系统启动与驱动实现原理的完整实战能力。开发板简介与板载资源GD32VF103V_EVAL 是兆易创新推出的 GD32VF1 系列评估板板载核心芯片为GD32VF103VBT6采用基于 RISC-V 指令集的 Bumblebee 内核相关架构配置见 rtconfig.py 中的ARCHrisc-v、CPUbumblebee。其核心参数如下主频108MHz128KB FLASH、32KB RAM调试接口GD-Link / J-Link该开发板常用板载资源包括LED4 个分别为 LED1PC0、LED2PC2、LED3PE0、LED4PE1按键2 个K1 为复位按键K2 为用户五向按键占用 PA0、PC13、PB14、PC5、PC4定时器General Timer × 4、Advanced Timer × 1、Basic Timer × 2系统定时器 × 1看门狗× 2RTC× 1通信接口USART × 3、UART × 2、I2C × 2、I2S × 2、SPI × 3、CAN2.0B × 2、USB2.0 OTG FS × 1显示/存储扩展TFT-LCD、EXMC/SDRAM × 1模拟外设ADC × 2、DAC × 2GPIO最多支持 80 个 GPIO外设支持情况本 BSP 当前对外设的支持情况如下表摘自 README.md 并与仓库源码核对片上外设支持情况备注GPIO支持PA0, PA1... → PIN: 0, 1...79UART支持UART0 - UART4I2C支持I2C1SPI支持SPI0 - SPI2ADC支持ADC0 - ADC2扩展模块暂不支持暂无从源码看上述外设均由bsp/gd32/risc-v/libraries/gd32_drivers目录下的驱动实现支撑包括 drv_gpio.c、drv_usart.c、drv_i2c.c、drv_spi.c、drv_adc.c 等并通过 board/Kconfig 以菜单方式开放使能开关。快速上手本 BSP 为开发者提供GCC 工程整个工程由顶层 SConstruct 与各目录 SConscript 组织采用 SCons 构建系统。下面介绍如何将系统运行起来。硬件连接使用数据线连接开发板到 PC使用 USB 转 232 连接USART0打开电源开关。编译下载在工程目录下执行以下命令编译工程scons编译完成后产物默认包括rtthread.elf与rtthread.bin由 rtconfig.py 中的POST_ACTION通过 objcopy 生成并使用J-Link / GD-Link将程序下载到开发板。编译工具链相关信息同样在 rtconfig.py 中定义交叉编译器前缀riscv-none-embed-如riscv-none-embed-gcc架构选项-marchrv32imac -mabiilp32并开启-DUSE_PLIC -DUSE_M_TIME -DNO_INIT链接脚本../libraries/GD32VF103_Firmware_Library/RISCV/env_Eclipse/GD32VF103xB.lds注意默认EXEC_PATH指向xpack-riscv-none-embed-gcc-10.2.0-1.2的 bin 目录实际使用时请根据本机安装的 RISC-V GCC 工具链路径调整或通过环境变量指定。运行结果下载程序成功之后系统会自动运行板载 LED 闪烁默认示例为 LED1。连接开发板对应串口到 PC在终端工具中打开相应串口参数115200-8-1-N即波特率 115200、8 位数据位、1 位停止位、无校验复位设备后即可看到 RT-Thread 的输出信息\ | / - RT - Thread Operating System / | \ 4.1.1 build Jun 8 2022 00:49:01 2006 - 2022 Copyright by RT-Thread team msh 出现msh 命令行提示符即表示系统已正常运行可以在串口终端中执行 RT-Thread 的 shell 命令。进阶使用用 ENV 工具开启更多外设本 BSP 默认仅开启 GPIO 和串口UART0功能。如需使用高级功能需要利用ENV 工具对 BSP 进行配置步骤如下在 BSP 目录下打开 ENV 工具输入menuconfig命令配置工程配置完成后保存退出输入pkgs --update命令更新软件包输入scons命令重新编译工程。menuconfig的菜单项由 board/Kconfig 定义顶层 Kconfig 会source该文件以及../libraries/Kconfig。可配置的片上外设开关及其默认值如下配置项说明默认值BSP_USING_GPIO启用 GPIO自动选择RT_USING_PINyBSP_USING_UART启用 UART 驱动框架yBSP_USING_UART0启用 UART0串口控制台yBSP_UART0_RX_USING_DMAUART0 接收 DMAnBSP_USING_UART1~BSP_USING_UART4分别启用 UART1 ~ UART4nBSP_USING_SPI/BSP_USING_SPI1启用 SPI 总线 / SPI1含 TX/RX DMA 选项nBSP_USING_SOFT_I2C/BSP_USING_SOFT_I2C1启用软件 I2C1可配置 SCL/SDA 引脚号默认 24/25nBSP_USING_ADC/BSP_USING_ADC0~2启用 ADC 及 ADC0/1/2nBSP_USING_TIM/BSP_USING_TIM10/11/12启用定时器TIM10/11/12nBSP_USING_ONCHIP_RTC启用片上 RTC可选择 LSE/LSI 时钟源nBSP_USING_WDT启用看门狗n配置结果最终写入 rtconfig.h。需要注意仓库中当前rtconfig.h已同时使能BSP_USING_UART0与BSP_USING_UART1而 Kconfig 中 UART1 默认关闭二者以实际执行menuconfig后的配置为准。源码级原理剖析系统启动与系统节拍Tick板级初始化入口位于 board/board.c 的rt_hw_board_init()其流程为调用_init()完成 C 运行时初始化通过systick_config(TIMER_FREQ / RT_TICK_PER_SECOND)配置系统节拍定时器RT_TICK_PER_SECOND在 rtconfig.h 中定义为 100即每秒 100 个 tick在RT_USING_SERIAL使能时调用rt_hw_usart_init()初始化串口设置控制台设备为RT_CONSOLE_DEVICE_NAME即uart0见 rtconfig.h依次执行板级组件初始化与系统堆初始化。系统节拍的中断服务函数eclic_mtip_handler()会清定时器计数并调用rt_tick_increase()完成时钟节拍递增这是 RT-Thread 调度器运转的时间基础。堆的起止地址由 board/board.h 中HEAP_BEGIN _end、HEAP_END _heap_end确定。GPIO 引脚映射与 LED 点灯menuconfig中描述的 PA0, PA1... → PIN: 0, 1...79 映射关系实现在 drv_gpio.c 的pins[]静态表中通过GD32_PIN(n, port, pin)宏将 RT-Thread 统一的 PIN 编号与芯片 GPIO 端口对应起来例如 PC0 对应 PIN 32。默认应用示例 applications/main.c 正是基于这套 PIN 框架实现 LED 闪烁#include rtthread.h #include rtdevice.h #include board.h /* defined the LED1 pin: PC0 */ #define LED1_PIN GET_PIN(C, 0) int main(void) { int count 1; /* set LED1 pin mode to output */ rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); while (count) { rt_pin_write(LED1_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED1_PIN, PIN_LOW); rt_thread_mdelay(500); } return RT_EOK; }这段代码通过GET_PIN(C, 0)获取 PC0 的 PIN 编号将其配置为推挽输出然后以 500ms 周期交替输出高低电平实现点灯效果——这也与 README 中下载程序成功后 LED 闪烁的运行结果一一对应。串口控制台控制台依赖的串口驱动位于 drv_usart.c默认注册的设备名为uart0。RT-Thread 内核在启动后会将 shellfinsh/msh绑定到该设备因此串口工具按 115200-8-1-N 连接 USART0 即可看到msh 提示符。默认配置中还启用了FINSH_USING_HISTORY历史记录 5 行、FINSH_CMD_SIZE 80、FINSH_ARG_MAX 10等 finsh 特性见 rtconfig.h。构建系统与工程组织BSP 工程的构建由 SConstruct 统一调度先通过PrepareBuilding准备 RT-Thread 内核与 libcpu 的编译单元再额外引入GD32VF103_Firmware_Library固件库与gd32_drivers驱动目录的 SConscript最终链接生成rtthread.elf。工程默认采用debug模式-O0 -g3可通过修改rtconfig.py切换优化等级。注意事项本 BSP 当前无已知使用注意事项README 中注意事项章节为暂无但在更换工具链或升级 RT-Thread 版本后建议重新执行menuconfig核对配置。若使用 DMA 功能如 UART RX DMA、SPI TX/RX DMA需在menuconfig中单独开启对应选项并在接线时确保外设时钟与引脚复用配置正确。维护与支持该 BSP 的维护人为BruceOu邮箱ouxiaolongbruceou.cn。如需提交问题或改进可参照仓库 MAINTAINERS 与 documentation/7.contribution 中的贡献流程进行。赞分享操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载相关推荐RT-Thread 在先楫 HPM6P00EVKRISC-V 双核上的 BSP 移植与快速上手实战指南RT Thread 在先楫 HPM6P00EVKRISC V 双核上的 BSP 移植与快速上手实战指南 本篇技术指南以 RT Thread 仓库中 bsp/操作系统嵌入式物联网嵌入式OSRTOSRT-Thread 在 HPMicro RISC-V 开发板上的 BSP 移植与快速上手指南RT Thread 在 HPMicro RISC V 开发板上的 BSP 移植与快速上手指南 导读 本文基于 RT Thread 仓库中的 bsp/hpmicr操作系统嵌入式物联网嵌入式OSRTOSRT-Thread 在 AB32VG1 骄龙开发板中科蓝讯 RISC-V上的 BSP 移植与实战指南RT Thread 在 AB32VG1 骄龙开发板中科蓝讯 RISC V上的 BSP 移植与实战指南 本篇技术指南以 RT Thread 仓库中 ab32v操作系统嵌入式物联网嵌入式OSRTOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Numba 环境变量完全指南:从 `.numba_config.yaml` 到 `NUMBA_*` 全量配置解析

Numba 环境变量完全指南:从 `.numba_config.yaml` 到 `NUMBA_*` 全量配置解析

编译器高性能计算 【免费下载链接】numba NumPy aware dynamic Python compiler using LLVM 项目地址: https://gitcode.com/gh_mirrors/nu/numba 点击查看 免费下载 Numba 通过一组以 NUMBA_ 前缀开头的环境变量,允许开发者在不修改代码的前提下动态改…

2026/9/24 5:48:03 阅读更多 →
专知智库·研发增长系统:一套系统,双重合规,三重增长

专知智库·研发增长系统:一套系统,双重合规,三重增长

专知智库研发增长系统:一套系统,双重合规,三重增长研发费用管理,早已超越简单的税务申报范畴!在金税四期的严密监管下,税务合规是底线;而对于谋求上市的企业,证监会《第九号指引》对…

2026/9/24 5:48:03 阅读更多 →
以太网速率与端口吞吐量的本质区别解析

以太网速率与端口吞吐量的本质区别解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 5:47:03 阅读更多 →

最新新闻

OpenHarmony上Flutter底部导航实现:从环境搭建到状态保持与避坑

OpenHarmony上Flutter底部导航实现:从环境搭建到状态保持与避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:30:30 阅读更多 →
车载测试速成班避坑指南:从CANoe操作到ECU验证的真相

车载测试速成班避坑指南:从CANoe操作到ECU验证的真相

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:30:30 阅读更多 →
ESP32 动态加载应用:基于 WebAssembly 的固件解耦实践

ESP32 动态加载应用:基于 WebAssembly 的固件解耦实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:30:30 阅读更多 →
S32K144开发新范式:图形化配置工具如何替代寄存器编程

S32K144开发新范式:图形化配置工具如何替代寄存器编程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:30:30 阅读更多 →
QPLCR3S电桥镊子:微欧级四线制阻抗测量的硬件实现

QPLCR3S电桥镊子:微欧级四线制阻抗测量的硬件实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:30:30 阅读更多 →
媒体发稿API平台选型指南,可对接系统平台推荐与比对

媒体发稿API平台选型指南,可对接系统平台推荐与比对

上线验收那天两边口径对不上,选型阶段其实就埋下了这个结果。 对接方递过来的是接口连通记录,采购方要的是一份能签字的验收说明,两份材料说的并不是同一件事。验收现场的分歧,通常集中在三处无法当场裁定的事情上。 稿件的状态算…

2026/9/24 6:29:30 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →