- 操作系统
- 嵌入式
- 物联网
- 嵌入式OS
- RTOS
【免费下载链接】rt-thread
RT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/
导读
本文基于 RT-Thread 仓库中bsp/stm32/stm32g030-tiny-board板级支持包(BSP)编写,面向希望将 RT-Thread 5.2.0 运行到 STM32G030C8T6 这颗 Arm Cortex-M0 内核 MCU 上的开发者。文章以官方 BSP 说明文档为主线,结合 BSP 目录下的源码、Kconfig 配置与构建脚本,完整覆盖开发板资源、外设支持现状、MDK5 快速上手指引、ENV 进阶配置流程、串口映射注意事项,并补充了 LED 点灯程序与时钟初始化等底层实现细节,帮助读者一步到位地把系统跑起来并逐步点亮更多板载外设。
开发板与 BSP 简介
stm32g030-tiny-board是 hywing 为 STM32g030-tiny-board 开发板提供的 RT-Thread BSP(板级支持包)。该开发板基于STM32G030C8T6芯片,属于 Arm Cortex-M0 内核,最高主频 64MHz,片上资源为64KB FLASH、8KB SRAM,同时提供标准 JTAG/SWD 调试接口,板载资源精简但足以充分发挥芯片性能。
开发板外观如下图所示:
围绕该芯片的内存布局,board/board.h 中定义了与硬件强相关的地址参数:FLASH 起始地址0x08000000、容量64 * 1024字节;内部 SRAM 容量定义为 8KB,堆区(HEAP)以__bss_end为起点、以STM32_SRAM_END(0x20000000 + 8 * 1024)为终点,RT-Thread 的动态内存分配即在此区间内工作。
外设支持情况
BSP 当前对外设的支持情况如下表所示:
| 板载外设 | 支持情况 | 备注 |
|---|---|---|
| USB 转串口 | 支持 | |
| 片上外设 | 支持情况 | 备注 |
| GPIO | 支持 | |
| UART | 支持 | UART1 |
从 BSP 的默认配置 rtconfig.h 可以看到,硬件驱动层面默认开启了BSP_USING_GPIO(依赖 RT-Thread 的RT_USING_PIN设备框架)与BSP_USING_UART/BSP_USING_UART1(依赖RT_USING_SERIAL),并且系统控制台设备被指定为uart1(RT_CONSOLE_DEVICE_NAME "uart1")。也就是说,上电后默认就能通过串口 1 看到 RT-Thread 的 MSH 命令行交互。
默认开启的功能相对精简,若要使用 ADC、I2C、SPI、PWM 等其他片上外设,需要按下文「进阶使用」章节通过 ENV 工具进行配置。
使用说明
使用说明分为「快速上手」与「进阶使用」两个章节:前者面向刚接触 RT-Thread 的新手,遵循简单步骤即可将 RT-Thread 运行起来并看到实验效果;后者面向需要驱动更多板载资源的开发者,通过 ENV 工具对 BSP 进行配置,开启更多高级功能。
快速上手
本 BSP 为开发者提供了 MDK5 工程,并支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。
请注意:在执行编译工作前,请先打开 ENV 执行以下指令(该指令用于拉取必要的 HAL 库及 CMSIS 库,否则无法通过编译):
pkgs --update这一步与 BSP 的构建机制直接相关:查看 BSP 根目录的 SConscript 可以发现,编译时会向工程注入STM32G030xx宏定义;而 STM32G0 的 HAL 驱动与 CMSIS 头文件并不随 BSP 源码直接分发,而是以软件包(package)的形式管理——默认配置中启用了PKG_USING_STM32G0_HAL_DRIVER、PKG_USING_STM32G0_CMSIS_DRIVER与PKG_USING_CMSIS_CORE(见 rtconfig.h)。因此首次构建前必须先运行pkgs --update把依赖包拉取到packages目录,否则头文件缺失会导致编译失败。
硬件连接
使用数据线连接开发板到 PC,打开电源开关。
编译下载
双击project.uvprojx文件,打开 MDK5 工程,编译并下载程序到开发板。
工程默认配置使用 ST_LINK 仿真器下载程序,在通过 ST_LINK 连接开发板的基础上,点击下载按钮即可下载程序到开发板。
工程文件(project.uvprojx)由 ENV/SCons 生成,因此如果在进阶使用中修改了配置,需要通过scons --target=mdk5重新生成工程后再编译下载。
运行结果
下载程序成功之后,系统会自动运行,LED 循环点亮。
连接开发板对应串口到 PC,在终端工具里打开相应的串口(115200-8-1-N,即波特率 115200、8 位数据位、1 位停止位、无校验),复位设备后,可以看到 RT-Thread 的输出信息:
\ | / - RT - Thread Operating System / | \ 5.2.0 build Dec 2 2024 11:35:30 2006 - 2024 Copyright by RT-Thread team msh >当msh >提示符出现时,说明 RT-Thread 内核、finsh/MSH 组件已正常运行,可以在命令行中直接输入 RT-Thread 命令进行交互。注意输出中的版本号5.2.0与 rtconfig.h 中RT_VER_NUM 0x50300对应,代表内核版本 5.3.0 之前的 5.2.x 分支。
LED 循环点亮的实现位于 applications/main.c:main函数把PB4引脚(GET_PIN(B, 4))配置为输出模式,随后进入while(1)循环,以rt_pin_write输出高低电平并配合rt_thread_mdelay(500)实现 500ms 间隔的闪烁,同时通过rt_kprintf打印提示信息——这是理解 RT-Thread 引脚 API(rt_pin_mode/rt_pin_write)最直观的入门示例。
进阶使用
此 BSP 默认只开启了 GPIO 和串口 1 的功能,如果需使用更多高级功能,需要利用 ENV 工具对 BSP 进行配置,步骤如下:
- 在 bsp 下打开 env 工具。
- 输入
menuconfig命令配置工程,配置好之后保存退出。 - 输入
pkgs --update命令更新软件包。 - 输入
scons --target=mdk5命令重新生成工程。
完成上述四步后,即可在 MDK5 中重新编译下载,将新配置的外设驱动加入固件。
menuconfig 中的可配置项
在menuconfig界面中,外设开关集中在Hardware Drivers Config → On-chip Peripheral Drivers菜单下,其选项定义见 board/Kconfig。以默认开启的 GPIO 与 UART1 为例,主要可配置项包括:
| 配置项 | 默认值 | 说明 |
|---|---|---|
BSP_USING_GPIO | y | 使能 GPIO,选中后自动依赖RT_USING_PIN引脚设备框架 |
BSP_USING_UART/BSP_USING_UART1 | y | 使能 UART1,自动依赖RT_USING_SERIAL串口设备框架 |
BSP_STM32_UART_V1_TX_TIMEOUT | 2000 | UART1(串口驱动 v1)发送超时,单位 ms |
BSP_UART1_RX_USING_DMA | n | UART1 接收 DMA(需开启RT_SERIAL_USING_DMA) |
BSP_UART1_TX_USING_DMA | n | UART1 发送 DMA(需开启RT_SERIAL_USING_DMA) |
BSP_UART1_RX_BUFSIZE | 256 | UART1 接收缓冲区大小,范围 64~65535(串口驱动 v2) |
BSP_UART1_TX_BUFSIZE | 0 | UART1 发送缓冲区大小,范围 0~65535(串口驱动 v2) |
BSP_UART1_DMA_PING_BUFSIZE | 64 | UART1 接收 DMA ping-pong 缓冲区大小,范围 32~65535 |
从默认配置 rtconfig.h 可以看到,当前 BSP 采用串口驱动 v1(RT_USING_SERIAL_V1),并已打开RT_SERIAL_USING_DMA使能位,因此 RX/TX DMA 两个选项在 Kconfig 中处于可选状态;若切换为 v2 驱动,则可进一步通过RX_BUFSIZE、TX_BUFSIZE等参数调整缓冲策略。底层外设驱动统一由source "$(BSP_DIR)/../libraries/HAL_Drivers/drivers/Kconfig"引入,即 bsp/stm32/libraries/HAL_Drivers 下的公共驱动实现。
本章节更多详细的介绍请参考 STM32 系列 BSP 外设驱动使用教程。
注意事项
- 调试串口为串口 1,引脚映射说明:
PB6 ------> USART1_TX PB7 ------> USART1_RX即 USART1 的发送引脚为 PB6、接收引脚为 PB7,串口线连接时需按此对应关系接线。控制台与 MSH 均复用该串口,因此在进阶配置中若要更换调试串口或重映射引脚,需要同步修改 board/CubeMX_Config 中的引脚配置与rtconfig.h中的RT_CONSOLE_DEVICE_NAME。
- 板级初始化与系统时钟配置位于 board/board.c:
SystemClock_Config使用内部高速时钟HSI(RCC_OSCILLATORTYPE_HSI)作为系统时钟源,未使能 PLL,AHB/APB1 均不分频,FLASH 等待周期为 0——这是默认功耗与性能均衡的时钟方案,如需更高主频可在该函数中调整 PLL 配置。
联系人信息
维护人:
- hywing
- 操作系统
- 嵌入式
- 物联网
- 嵌入式OS
- RTOS
【免费下载链接】rt-thread
RT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/
相关推荐
RT-Thread 在 STM32F401 WeAct BlackPill 上的 BSP 开发指南:从快速上手到外设驱动深度扩展
RT Thread 在 STM32F401 WeAct BlackPill 上的 BSP 开发指南:从快速上手到外设驱动深度扩展 本篇指南围绕 RT Threa
操作系统嵌入式物联网嵌入式OSRTOSQMK Firmware 2020 年 11 月 28 日 Breaking Change 发布说明:键盘迁移、核心新特性与构建流程解读
QMK Firmware 2020 年 11 月 28 日 Breaking Change 发布说明:键盘迁移、核心新特性与构建流程解读 QMK Firmwar
操作系统嵌入式物联网嵌入式OSRTOSWasp 页面与路由(Pages & Routes)入门:用 route 与 page 声明构建 React 应用导航
Wasp 页面与路由(Pages & Routes)入门:用 route 与 page 声明构建 React 应用导航 在 Wasp 中,页面与路由的声明式配置
操作系统嵌入式物联网嵌入式OSRTOS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考