操作系统嵌入式物联网嵌入式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 的 GD32 RISC-V 系列 BSP包含 gd32vf103r-start、gd32vf103v-eval、gd32vw553h-eval 等开发板默认仅开启 GPIO 与串口 0 等少量驱动大量板载与片上外设需要开发者通过 ENV 工具按需开启。本文以在 GD32VF103V-EVAL 开发板上开启 UART1 为例完整演示 menuconfig 配置、pkgs --update更新、scons编译、下载与list_device验证的完整流程并结合仓库源码解析配置宏、条件编译与设备注册背后的实现机制。读完本文你将掌握 GD32 RISC-V 系列 BSP 外设驱动的通用开启方法并能据此扩展到 SPI、I2C、ADC、TIMER、RTC、WDT 等更多片上外设。1. 教程定位与前置条件本教程面向需要在 RT-Thread 上使用更多开发板资源的开发者。通过 ENV 工具对 BSP 进行配置可以开启更多板载资源实现更多高级功能主要包括三方面内容如何使用开发板上更多的板载资源如 Flash、SD 卡等板载外设如何使用更多的片上资源如定时器、ADC、看门狗等芯片外设如何添加更多片上资源选项扩展模块驱动。前置要求学会如何使用 ENV 工具menuconfig、pkgs --update、scons等命令可参考 RT-Thread 官方《ENV 工具用户手册》进行学习。ENV 工具生成的rtconfig.h是驱动裁剪与编译的“总开关”后文会结合源码说明其作用。与本文配套的还有两篇同系列文档建议一并阅读GD32 RISC-V 系列驱动介绍介绍 RT-Thread I/O 设备管理框架及三类驱动的概念GD32 RISC-V 系列 BSP 制作教程介绍如何从零制作一个 GD32 RISC-V BSP。2. 三类外设驱动与配置体系在深入了解配置步骤前先明确 GD32 RISC-V 系列 BSP 中的驱动分类详见 GD32_RISC-V系列驱动介绍.md驱动类别含义典型示例板载外设驱动MCU 之外、开发板上的外设TF 卡、以太网、LCD、USB FS片上外设驱动MCU 芯片内部的外设GPIO、UART、SPI、I2C、ADC、TIMER、PWM、RTC、WDT扩展模块驱动通过扩展接口或杜邦线连接的模块ESP8266 串口转 WiFi 模块这三类驱动分别对应 menuconfig 中Hardware Drivers Config菜单下的板载外设配置菜单Onboard Peripheral Drivers、片上外设配置菜单On-chip Peripheral Drivers和扩展模块配置菜单Board extended module Drivers三个子菜单配置项全部由 BSP 的 Kconfig 文件定义。以 gd32vf103v-eval 为例配置体系的 Kconfig 依赖链如下bsp/gd32/risc-v/gd32vf103v-eval/KconfigBSP 顶层配置入口通过source引入 RT-Thread 内核配置、软件包配置、libraries公共库配置与board/Kconfigbsp/gd32/risc-v/gd32vf103v-eval/board/Kconfig定义Hardware Drivers Config菜单及其下全部外设配置项bsp/gd32/risc-v/libraries/gd32_drivers/Kconfig公共驱动库的补充配置如 USB 设备配置。menuconfig 最终把开发者勾选的配置项写入 BSP 根目录的rtconfig.hSCons 构建系统再依据其中的宏如BSP_USING_UART1、RT_USING_SERIAL决定编译哪些驱动源文件。3. 实战在 GD32VF103V-EVAL 上开启 UART1下面以在 GD32VF103V-EVAL 开发板上开启 UART1 驱动为例一步步演示如何使用 ENV 工具对 BSP 进行配置。3.1 打开配置工具在目录rt-thread/bsp/gd32/risc-v/gd32vf103v-eval仓库内对应 bsp/gd32/risc-v/gd32vf103v-eval下打开 ENV 工具并执行 menuconfig打开的配置界面即是 RT-Thread 的配置菜单通过键盘上下键移动光标选中Hardware Drivers Config后按回车键进入硬件驱动配置菜单。3.2 进入硬件驱动配置菜单在硬件驱动配置菜单中可以看到三个子菜单项板载外设配置菜单、片上外设配置菜单和扩展模块配置菜单。本示例的 UART1 属于片上外设因此按回车进入“片上外设配置菜单”若目标外设是板载的 Flash、SD 卡等则应进入“板载外设配置菜单”。这两个菜单的结构均定义在 board/Kconfig 中。3.3 在配置菜单中开启 UART1在片上外设配置菜单中Enable UART默认是开启的对应BSP_USING_UART同时会自动选中RT_USING_SERIAL其下有 UART0UART4 五个通道选项。默认只有 UART0 被开启用作系统控制台其余均为关闭。将光标移动到Enable UART1选项上按空格或回车将其置为选中状态选中后该项下还会出现Enable UART1 RX DMA子选项默认关闭。若你的应用需要串口接收走 DMA 通道可一并开启此时 menuconfig 会自动关联RT_SERIAL_USING_DMA宏详见 board/Kconfig。3.4 保存退出配置完成后右移光标选中Save按回车键保存配置然后按 Esc 键退出配置工具。保存操作会把本次选择写入 BSP 根目录的rtconfig.h其中与 UART1 相关的宏定义形如#define BSP_USING_UART #define BSP_USING_UART0 #define BSP_USING_UART1可对照 gd32vf103v-eval/rtconfig.h 中已生成的配置查看实际效果。3.5 更新软件包输入命令pkgs --update使软件包配置生效。若本次配置未涉及任何软件包该命令会直接返回不会对驱动产生副作用。3.6 编译在工程目录下直接使用scons命令编译程序值得注意的是使用 GCC 编译需要先配置好 RISC-V 系列 MCU 的交叉编译工具链。本 BSP 的 GCC 工具链配置位于 gd32vf103v-eval/rtconfig.py其中编译器前缀为riscv-none-embed-体系结构为-marchrv32imac -mabiilp32链接脚本使用 GD32VF103 系列的GD32VF103xB.lds位于 libraries/GD32VF103_Firmware_Library/RISCV/env_Eclipse。若本机交叉编译工具链路径与默认值不同可修改EXEC_PATH或在环境中设置RTT_EXEC_PATH后再编译。3.7 下载编译产物为rtthread.elf构建脚本会同时生成rtthread.bin。下载方式灵活可选用J-Link / GD-Link通过调试器直接烧写GD 官方 DFU使用 GD32VF103 的 USB DFU 功能在线升级OpenOCD仓库 RISCV/tools/openocd_upload.sh 提供了 OpenOCD 上传脚本可参考使用。3.8 查看运行结果程序运行后在串口终端默认 115200-8-1-N控制台为 uart0中输入list_device命令可以看到名为uart1的设备出现在设备列表中此时 UART1 设备已经可以被应用程序正常使用了之后便可在应用代码中通过 RT-Thread 串口设备 API如rt_device_find(uart1)rt_device_open/rt_device_read/rt_device_write收发数据具体用法可参考 RT-Thread 官方 UART 设备驱动框架文档以及仓库 examples/test 下的驱动框架测试示例。4. 配置背后发生了什么源码级解析“在 menuconfig 里打个勾驱动就生效了”的背后是一套完整的条件编译机制。以 UART1 为例可沿以下源码路径逐层印证第一步宏定义写入 rtconfig.h。menuconfig 保存后BSP_USING_UART1等宏被写入 BSP 根目录的rtconfig.h参见 gd32vf103v-eval/rtconfig.h。第二步SConscript 依据宏决定编译哪些驱动源文件。libraries/gd32_drivers/SConscript 中通过GetDepend([RT_USING_SERIAL])判断是否把drv_usart.c加入工程类似地RT_USING_PIN对应drv_gpio.c、RT_USING_SPI对应drv_spi.c、RT_USING_ADC对应drv_adc.c、RT_USING_CLOCK_TIME对应drv_timer.c、RT_USING_RTC对应drv_rtc.c等。因此“重新生成的工程中会自动添加对应的驱动文件”正是这一条件编译机制的直接体现。第三步驱动内部按 BSP_USING_UARTx 注册设备。在 drv_usart.c 中第 4675 行#if defined(BSP_USING_UART1)分支内定义了串口设备实例serial1及中断服务函数USART1_IRQHandlerGD32VF103 系列GD32VW55x 系列则使用UART1_IRQHandler若芯片系列不匹配会触发#error提示第 203224 行uart_obj[]设备对象表中登记了 UART1 的外设索引USART1、中断号USART1_IRQn、外设时钟RCU_USART1以及TXGPIOA PIN2、RXGPIOA PIN3的引脚映射GD32VW55x 系列还需额外配置GPIO_AF_7复用功能设备名为uart1这正是list_device中看到的名字。从中可以推断每个BSP_USING_UARTx宏既决定了对应串口设备与中断服务函数是否编译也决定了其在uart_obj[]表中的注册项。开发者开启外设后无需手动修改驱动源码驱动文件会以宏为“开关”自动适配。另外值得注意示例开发板的系统控制台固定使用uart0见 rtconfig.h 中RT_CONSOLE_DEVICE_NAME uart0因此默认配置必须保留 UART0新增的 UART1 通常用作数据通信串口两者互不冲突。5. 更多外设的开启方式片上外设配置全解掌握了 UART1 的开启流程后其他外设的开启方式完全一致。下表汇总了 gd32vf103v-eval/board/Kconfig 中片上外设配置菜单的完整配置项与默认值方便开发者按需开启配置项功能默认值关联的 RT-Thread 组件宏Enable GPIO通用 GPIO管脚编号 079开启RT_USING_PINEnable UARTUART0UART4串口收发每路可单独开启 RX DMAUART 开启、UART0 开启、其余关闭RT_USING_SERIAL、RT_SERIAL_USING_DMAEnable SPI BUSSPI1SPI 总线可单独开启 TX/RX DMA关闭RT_USING_SPIEnable software I2Cswi2c1软件 I2C 总线可配置 SCL/SDA 引脚号默认 SCL24、SDA25关闭RT_USING_I2C、RT_USING_SOFT_I2CEnable ADCADC0ADC2测量管脚模拟量关闭RT_USING_ADCEnable timerTIM10TIM13硬件定时器用于测量时间与定时回调关闭RT_USING_CLOCK_TIMEEnable RTC设置与读取时间可选择 LSE/LSI 时钟源默认 LSE关闭RT_USING_RTCEnable Watchdog Timer看门狗驱动关闭RT_USING_WDT各配置项的 Kconfig 定义详见 board/Kconfig其编写方式与 BSP 制作流程可参考 GD32_RISC-V系列BSP制作教程.md。同系列其他 BSP如 gd32vf103r-start、gd32vw553h-eval的 Kconfig 结构与此类似但外设资源与默认引脚不同例如 gd32vw553h-eval 在drv_usart.c中针对 VW55x 系列启用了不同的中断函数名与 GPIO 复用配置并额外支持 PWM、看门狗等驱动。此外驱动介绍文档 GD32_RISC-V系列驱动介绍.md 中列出了 GPIO、UART、soft I2C、SPI、ADC、TIMER、PWM、RTC、WDT 等片上外设及 USB FS、LCD 等板载外设、ESP8266 扩展模块对应的驱动框架文档开发者可按需查阅对应框架的编程手册。6. 总结当开发者需要使用尚未开启的外设时只需在 ENV 工具中使能对应配置项并保存重新生成的工程就会自动加入对应的驱动文件menuconfig 将选择写入rtconfig.hSConscript 依据RT_USING_*宏决定驱动源文件的编译驱动内部依据BSP_USING_*宏注册对应设备实例、中断服务函数与引脚映射scons编译后下载即可通过list_device验证设备并调用 RT-Thread 统一的设备驱动 API 开发应用。这一“Kconfig 配置宏 → 条件编译 → 设备注册”的链路在整个 GD32 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 GD32 RISC-V 系列 BSP 说明开发板支持、驱动配置与 BSP 移植实践RT Thread GD32 RISC V 系列 BSP 说明开发板支持、驱动配置与 BSP 移植实践 RT Thread 的 bsp/gd32/risc v操作系统嵌入式物联网嵌入式OSRTOSRT-Thread GD32 RISC-V 系列 BSP 外设驱动体系详解I/O 设备管理框架与三类驱动使用指南RT Thread GD32 RISC V 系列 BSP 外设驱动体系详解I/O 设备管理框架与三类驱动使用指南 RT Thread 为开发者提供了一套统一的操作系统嵌入式物联网嵌入式OSRTOSRT-Thread GD32 ARM 系列 BSP 外设驱动使用教程使用 ENV 工具开启更多板载与片上资源RT Thread GD32 ARM 系列 BSP 外设驱动使用教程使用 ENV 工具开启更多板载与片上资源 本文基于 RT Thread 仓库中 bsp/g操作系统嵌入式物联网嵌入式OSRTOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
