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),仅供参考

相关新闻

DeepSeek-R1本地RAG实战:PDF知识库构建与高性能部署

DeepSeek-R1本地RAG实战:PDF知识库构建与高性能部署

简介:本资源是一份面向AI开发者与技术实践者的本地知识库构建指南,聚焦DeepSeek-R1大模型在RAG(检索增强生成)场景下的轻量级落地应用。文档系统讲解了如何利用Ollama、Nomic-Embed-Text向量模型与AnythingLLM平台,从零…

2026/9/23 16:07:43 阅读更多 →
Dopamine 中 RainbowNetwork 深度解析:基于卷积网络计算 Agent 回报分布的架构与实现

Dopamine 中 RainbowNetwork 深度解析:基于卷积网络计算 Agent 回报分布的架构与实现

机器学习深度学习 【免费下载链接】dopamine Dopamine is a research framework for fast prototyping of reinforcement learning algorithms. 项目地址: https://gitcode.com/gh_mirrors/do/dopamine 点击查看 免费下载 RainbowNetwork 是 Dopamine 项目&#x…

2026/9/23 16:06:43 阅读更多 →
Ubuntu误删.docx文件恢复实战指南

Ubuntu误删.docx文件恢复实战指南

简介:本资源是一份面向Linux系统运维人员与Ubuntu初学者的实用故障恢复指南,聚焦rm命令误删文件后的紧急抢救方案。文档详细对比分析ext3grep(适配ext3)与extundelete(支持ext4,兼容主流Ubuntu版本&#xf…

2026/9/23 16:06:43 阅读更多 →

最新新闻

Flutter在OpenHarmony上的家庭相册实战:分组设计与性能优化

Flutter在OpenHarmony上的家庭相册实战:分组设计与性能优化

做 OpenHarmony 应用也有一段时间了,最近刚好在做一个家庭相册 App 的实战项目,框架用的是社区维护的 Flutter for OpenHarmony,功能里最有意思、也是最花心思的部分,就是“家庭分组”的实现。整个项目做完,我对 Flutt…

2026/9/24 18:58:32 阅读更多 →
AVEVA InTouch HMI底层原理与工业确定性设计解析

AVEVA InTouch HMI底层原理与工业确定性设计解析

1. 项目概述:为什么AVEVA InTouch HMI在工业现场仍被老工程师悄悄压箱底? AVEVA InTouch HMI不是“新锐网红”,而是工业自动化圈里那种你查维修记录时总在2012年投产的产线PLC柜里翻出的、外壳泛黄但触控依然跟手的HMI工程文件——它不常上热…

2026/9/24 18:58:32 阅读更多 →
手机靓号到底值不值钱?从结构估值到避坑实操全解析

手机靓号到底值不值钱?从结构估值到避坑实操全解析

前天帮一个搞招商的朋友挑了组尾号,他拿到手第一句话是:“这号是不是太炸眼了?”我说你搞连锁加盟的,电话一天几十通,客户记不住号码,你前面全白干。这年头流量贵、信任难建,一个让人一眼记住、…

2026/9/24 18:58:32 阅读更多 →
Flutter + OpenHarmony 跨端实战:家庭相册分组功能落地全解析

Flutter + OpenHarmony 跨端实战:家庭相册分组功能落地全解析

前一阵子在评估OpenHarmony设备的跨端方案,团队的旧App要迁一部分到OpenHarmony上,又不想把现有的Flutter代码推倒重写。正好赶上社区里Flutter for OpenHarmony的适配链路逐渐跑通,就挑了一个家庭相册App作为试点项目,把核心的家…

2026/9/24 18:58:32 阅读更多 →
红队渗透测试实战复盘:从入口突破到内网横向的完整攻击链拆解

红队渗透测试实战复盘:从入口突破到内网横向的完整攻击链拆解

红队测试这行干久了,你会发现一个有意思的现象:很多企业觉得自己的安全防护做得不错,等真正被红队模拟真实攻击者打一轮,往往撑不过两周。我印象最深的一次项目,目标是互联网上一家成熟的软件公司,防守方部…

2026/9/24 18:58:32 阅读更多 →
Ubuntu云服务器部署OpenClaw并接入飞书机器人全指南

Ubuntu云服务器部署OpenClaw并接入飞书机器人全指南

最近帮一个做SaaS的团队把OpenClaw部署到了他们的Ubuntu云服务器上,顺手把飞书机器人也接上了。这事听起来简单,实际做起来环节不少:云服务器初始化、Docker runtime、OpenClaw配置、飞书开放平台应用创建、channel对接、消息联调&#xff0c…

2026/9/24 18:57:31 阅读更多 →

日新闻

基于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/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

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

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

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

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

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

2026/9/24 14:33:56 阅读更多 →

月新闻

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

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

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

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

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

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

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

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

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

2026/9/24 12:49:17 阅读更多 →