多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

RT-Thread 在 GD32VF103V_EVAL(RISC-V 内核)上的 BSP 移植与实践指南

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),仅供参考
返回列表