ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

RT-Thread GD32 ARM 系列 BSP 外设驱动使用教程:使用 ENV 工具开启更多板载与片上资源

RT-Thread GD32 ARM 系列 BSP 外设驱动使用教程:使用 ENV 工具开启更多板载与片上资源 操作系统嵌入式物联网嵌入式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/arm/docs/GD32_ARM系列BSP外设驱动使用教程.md 展开面向需要在 RT-Thread 上使用更多 GD32 开发板资源的开发者。文章以 GD32407V-START 开发板开启 UART2 为例完整演示 ENV 工具的 menuconfig 配置、软件包更新与工程重新生成的实战流程并结合 BSP 源码剖析外设配置项背后的实现机制读完即可举一反三地为 GD32 ARM 系列其他开发板开启任意外设。一、适用范围与前置准备GD32 ARM 系列 BSP 位于仓库的bsp/gd32/arm/目录包含 gd32103c-eval、gd32307e-start、gd32407v-start、gd32e503v-eval、gd32h759i-eval 等二十余个开发板工程。这些 BSP 工程默认只开启了最基本的外设通常只有 GPIO 和调试串口而开发板上大量的板载资源Flash、SD 卡、USB 等和芯片的片上外设UART、SPI、ADC、定时器、RTC 等默认处于关闭状态。要开启这些资源核心工具是RT-Thread ENV 工具。ENV 是一个基于命令行的开发辅助工具可以在 BSP 目录下直接运行menuconfig打开图形化配置界面完成外设驱动的勾选与参数配置并配合scons重新生成 Keil MDK / IAR 工程。开始之前需要满足以下前提已安装并配置好 RT-Thread ENV 工具掌握其基本操作建议先通读 RT-Thread 官方《env 工具用户手册》已准备好目标开发板对应的 BSP 工程目录例如本教程使用的 bsp/gd32/arm/gd32407v-start已安装 MDK5或 IAR等编译下载工具链。二、理解 GD32 BSP 的外设配置体系在使用 ENV 工具之前先了解外设选项是如何组织的这有助于理解后续每一步操作的含义。每个开发板工程的 Kconfig 都通过source语句把 RT-Thread 内核配置、GD32 公共库配置和板级配置串联起来。以 bsp/gd32/arm/gd32407v-start/Kconfig 为例mainmenu RT-Thread Configuration BSP_DIR : . RTT_DIR : ../../../.. PKGS_DIR : packages source $(RTT_DIR)/Kconfig osource $PKGS_DIR/Kconfig rsource ../libraries/Kconfig rsource board/Kconfig其中board/Kconfig定义了板级硬件配置菜单。打开 bsp/gd32/arm/gd32407v-start/board/Kconfig 可以看到Hardware Drivers Config菜单下分为三大类菜单英文名说明板载外设配置菜单Onboard Peripheral Drivers配置开发板上直接焊接的外设LED、按键、板载 Flash 等片上外设配置菜单On-chip Peripheral Drivers配置 MCU 芯片内部的外设UART、SPI、ADC、TIM、RTC、WDT、SDIO、USB 等扩展模块配置菜单Board extended module Drivers配置通过排针等接口扩展的模块板级 Kconfig 还通过source $(BSP_DIR)/../libraries/gd32_drivers/Kconfig引入了 GD32 公共驱动层的配置选项如 USB 的 FS/HS 类型与 PHY 接口选择、硬件 I2C 的接收方案选择详见 bsp/gd32/arm/libraries/gd32_drivers/Kconfig。配置项最终会以#define宏的形式写入rtconfig.h驱动源码通过#if defined(BSP_USING_xxx)决定是否编译和注册对应外设。因此在 menuconfig 中勾选某个外设等效于在工程中启用对应的驱动文件与设备注册代码这就是重新生成工程后驱动自动生效的原理。三、实战在 GD32407V-START 上开启 UART2 驱动下面以在 GD32407V-START 开发板上开启 UART2 为例逐步演示 ENV 工具的完整使用流程。GD32407V-START 基于 GD32F407VKT6 芯片主频最高 168MHz3MB Flash、192KB RAM板载 LED、按键、USB 接口与 GD-Link 调试器开发板详情可参考 bsp/gd32/arm/gd32407v-start/README.md。1打开配置工具在终端中进入 BSP 工程目录bsp/gd32/arm/gd32407v-start输入命令打开 menuconfig 配置界面menuconfig打开后的配置工具界面即 RT-Thread 的配置主菜单。通过键盘上下键移动光标选中Hardware Drivers Config按回车键进入硬件驱动配置菜单。2进入硬件驱动配置菜单在硬件配置菜单中可以看到三个选项板载外设配置菜单、片上外设配置菜单和扩展模块配置菜单这与上一节介绍的 Kconfig 结构一一对应。按回车键进入板载外设配置菜单。3在板载外设配置菜单里开启 UART2在板载外设配置菜单中找到Enable UART2选项使用空格键将其勾选为*选中状态如下图所示从 bsp/gd32/arm/gd32407v-start/board/Kconfig 的源码可以看到BSP_USING_UART2默认值为n未开启这正是 BSP 工程默认只有 GPIO 和串口 1 的原因开启后 menuconfig 还会自动展开 UART2 的 TX/RX 引脚、复用功能等子配置项详见第四节。4保存退出配置完成后按键盘右方向键移动光标到下方菜单栏的Save按回车键保存配置然后按Esc键退出配置工具。5更新软件包在 BSP 目录下执行如下命令使软件包packages配置生效pkgs --update该命令会根据配置拉取或更新packages目录下的软件包。若本次配置未涉及软件包命令也会完成配置同步为后续构建做好准备。6生成 MDK5 工程执行 SCons 构建命令重新生成 MDK5 工程scons --targetmdk5命令执行完成后BSP 目录下会生成新的project.uvprojx工程文件。重新生成的关键作用在于SCons 会根据rtconfig.h中的配置宏把新增外设对应的驱动源文件如 UART2 相关的注册代码自动加入工程。7编译下载打开重新生成的 MDK5 工程文件点击编译Build编译通过后下载程序到开发板GD32407V-START 默认使用 GD-Link 仿真器下载。8查看运行结果程序烧录并运行后在串口终端中打开开发板的调试串口默认 115200-8-1-N进入msh命令行输入list_device命令查看系统中已注册的设备msh list_device此时可以看到名为uart2的设备已被注册到 RT-Thread 设备框架中说明 UART2 驱动已经成功启用。之后便可以在应用代码中通过rt_device_find(uart2)获取该设备句柄使用 RT-Thread 的串口设备 APIrt_device_open/rt_device_read/rt_device_write等进行收发操作。四、UART 配置项深度解析配置背后的源码机制menuconfig 中看到的每一个配置项最终都对应 Kconfig 定义与驱动源码中的条件编译分支。以 UART2 为例可以从源码中印证完整的生效链路。1Kconfig 中的 UART2 选项在 bsp/gd32/arm/gd32407v-start/board/Kconfig 中UART2 的完整配置块如下节选关键部分menuconfig BSP_USING_UART2 bool Enable UART2 default n if BSP_USING_UART2 config BSP_UART2_TX_PIN string UART2 TX name, such as PA8 default PB10 config BSP_UART2_RX_PIN string UART2 RX name, such as PA9 default PB11 config BSP_UART2_AFIO string UART2 alternate function, such as AF7 default AF7 ... endif其中几个关键配置项的含义与默认值如下配置项类型默认值说明BSP_USING_UART2boolnUART2 总开关开启后才显示子选项BSP_UART2_TX_PINstringPB10UART2 发送引脚可按硬件连接修改BSP_UART2_RX_PINstringPB11UART2 接收引脚BSP_UART2_AFIOstringAF7引脚复用功能号需与芯片手册和引脚定义一致注意BSP_UART2_TX_PIN/RX_PIN修改后必须与开发板实际接线一致且AFIO复用号必须匹配目标引脚所在端口的复用功能表否则串口无法正常工作。2引脚与寄存器配置宏在 Kconfig 中配置的引脚名和复用号会进一步传递给驱动配置文件 bsp/gd32/arm/libraries/gd32_drivers/config/uart_config.h其中定义了 UART2 的硬件配置宏#if defined(BSP_USING_UART2) #ifndef UART2_CONFIG #define UART2_CONFIG \ { \ .uart_periph USART2, \ .irqn USART2_IRQn, \ .per_clk RCU_USART2, \ .tx_pin_name BSP_UART2_TX_PIN, \ .rx_pin_name BSP_UART2_RX_PIN, \ .alternate BSP_UART2_AFIO, \ .serial serial2, \ .device_name uart2, \ } #endif /* UART2_CONFIG */ #endif /* BSP_USING_UART2 */这个宏把外设实例USART2、中断号USART2_IRQn、时钟RCU_USART2、引脚与复用号以及设备名uart2打包成一个结构体供驱动初始化时使用。3驱动注册与初始化在 bsp/gd32/arm/libraries/gd32_drivers/drv_usart.c 中UART2_CONFIG被填入串口设备配置数组#ifdef BSP_USING_UART2 UART2_CONFIG, #endif最终由rt_hw_usart_init完成底层初始化并将uart2注册到 RT-Thread 设备框架。整个链路可归纳为menuconfig 勾选 Enable UART2 → rtconfig.h 生成 #define BSP_USING_UART2 → scons 重新生成工程加入驱动源文件 → uart_config.h 中 UART2_CONFIG 宏生效 → drv_usart.c 注册 uart2 设备 → msh 下 list_device 可见 uart24串口框架版本与 DMA 选项GD32 的 UART 驱动同时支持 Serial V1 与 Serial V2 两套串口框架可在Enable UART菜单下的Select UART framework version中选择Use Serial V1 framework经典串口框架RT_USING_SERIAL默认选项兼容性好Use Serial V2 framework新一代串口框架RT_USING_SERIAL_V2支持更灵活的 DMA 收发。若选择 Serial V2UART2 下还会出现 DMA 相关配置以BSP_USING_SERIAL_V2为条件见 bsp/gd32/arm/gd32407v-start/board/Kconfig配置项说明默认值BSP_UART2_RX_USING_DMA开启 UART2 接收 DMAnBSP_UART2_TX_USING_DMA开启 UART2 发送 DMAnBSP_UART2_DMA_PING_BUFSIZERX DMA 乒乓缓冲大小16~6553564BSP_UART2_RX_BUFSIZERX 缓冲区大小64~65535128BSP_UART2_TX_BUFSIZETX 缓冲区大小0~65535128DMA 收发需要先在内核配置中开启RT_SERIAL_USING_DMA适用于大数据量、低 CPU 占用的串口应用场景对普通调试串口保持默认的 V1 框架即可。五、开启更多片上外设与扩展模块除 UART 外GD32 ARM 系列 BSP 的片上外设配置菜单还提供了大量外设开关同样遵循勾选 → 保存 → 更新 → 重新生成工程的流程。以 bsp/gd32/arm/gd32407v-start/board/Kconfig 为参考常见外设选项及其自动关联的内核组件如下外设配置项自动选中的组件说明GPIOBSP_USING_GPIORT_USING_PIN默认开启提供 PIN 设备UARTBSP_USING_UARTRT_USING_SERIAL/RT_USING_SERIAL_V2默认开启可选择 UART0~UART3 等SPIBSP_USING_SPIRT_USING_SPI可开启 SPI1 总线及其 TX/RX DMAADCBSP_USING_ADCRT_USING_ADC可分别开启 ADC0/ADC1/ADC2定时器BSP_USING_TIMRT_USING_CLOCK_TIME可开启 TIM10/TIM11/TIM12 等RTCBSP_USING_ONCHIP_RTCRT_USING_RTC可进一步开启 RTC AlarmAlarm0/Alarm1看门狗BSP_USING_WDTRT_USING_WDT片上看门狗SDIOBSP_USING_SDIORT_USING_SDIORT_USING_DFS用于挂载 SD 卡等存储设备USB 设备BSP_USING_USBDRT_USING_USB_DEVICEUSB Device 功能USB 主机BSP_USING_USBHRT_USING_USB_HOST可进一步开启 Udisk 驱动并配置挂载点此外GD32 公共驱动层还提供了细粒度的配置项例如 USB 的 Full Speed / High Speed 类型选择、Embedded/UTMI/ULPI PHY 接口选择以及硬件 I2C 主接收方案 A/B 的选择均定义在 bsp/gd32/arm/libraries/gd32_drivers/Kconfig 中。对应的驱动实现如drv_adc.c、drv_spi.c、drv_sdio.c、drv_usbd相关源码全部位于 bsp/gd32/arm/libraries/gd32_drivers 目录可根据需要深入阅读。如何添加更多片上资源选项如果现有配置项仍不满足需求可以自行扩展。从源码结构看为 BSP 新增一个外设选项通常需要三步在 Kconfig 中声明配置项在 bsp/gd32/arm/gd32407v-start/board/Kconfig 的On-chip Peripheral Drivers菜单下新增BSP_USING_XXX选项并select对应的 RT-Thread 组件在驱动库中实现条件编译注册在 bsp/gd32/arm/libraries/gd32_drivers 对应驱动文件中用#ifdef BSP_USING_XXX包裹初始化与设备注册代码并在 bsp/gd32/arm/libraries/gd32_drivers/SConscript 中确认源文件参与构建重新生成工程验证保存配置后执行pkgs --update与scons --targetmdk5编译下载后通过list_device确认新设备是否注册成功。新增或修改 Kconfig 属于对仓库源码的定制开发实际项目中可参考仓库现有驱动的实现模式例如对比drv_usart.c与drv_spi.c的注册方式来完成。六、总结RT-Thread GD32 ARM 系列 BSP 的外设驱动使用流程可以概括为一句话在 ENV 工具中使能相关外设重新生成工程后对应驱动即自动生效。具体步骤为在 BSP 目录下运行menuconfig进入Hardware Drivers Config在板载外设 / 片上外设 / 扩展模块菜单中勾选所需外设并配置参数引脚、复用号、DMA、缓冲区等保存退出后执行pkgs --update更新软件包执行scons --targetmdk5或mdk4/iar重新生成工程编译下载通过list_device验证设备注册结果。这一机制依托 Kconfig 配置体系与条件编译的驱动实现让开发者无需手工修改工程文件即可快速启用 UART、SPI、ADC、TIM、RTC、SDIO、USB 等外设从而将精力集中在应用功能的开发上。本文涉及的配置选项与源码均可在仓库中进一步查阅GD32_ARM 系列外设驱动使用教程、gd32407v-start 板级 Kconfig、UART 配置宏定义 与 GD32 公共驱动实现。赞分享操作系统嵌入式物联网嵌入式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 ARM 系列外设驱动指南I/O 设备管理框架与驱动分类应用RT Thread GD32 ARM 系列外设驱动指南I/O 设备管理框架与驱动分类应用 本文围绕 RT Thread 在 GD32 ARM 系列 BSP如操作系统嵌入式物联网嵌入式OSRTOSRT-Thread AT32M412 AT-START 开发板 BSP 使用指南从快速上手到外设驱动解析RT Thread AT32M412 AT START 开发板 BSP 使用指南从快速上手到外设驱动解析 AT32M412 AT START 是雅特力Art操作系统嵌入式物联网嵌入式OSRTOSRT-Thread 在 GD32303C-START 开发板上的 BSP 使用指南外设支持、快速上手与 ENV 进阶配置RT Thread 在 GD32303C START 开发板上的 BSP 使用指南外设支持、快速上手与 ENV 进阶配置 GD32303C START 是兆易操作系统嵌入式物联网嵌入式OSRTOS上一篇Fluent UI React v9现代化React组件开发实践下一篇5分钟掌握nvm-desktop桌面版Node.js版本管理终极解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表