- 操作系统
- 嵌入式
- 物联网
- 嵌入式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 官方为 ST 的 STM32F469 Discovery 套件提供了完整的板级支持包(BSP),本文以 bsp/stm32/stm32f469-st-disco/README.md 及对应的 中文说明 为骨架,结合仓库内 BSP 的源码、Kconfig 配置与工程文件,系统讲解该 BSP 的板载资源、外设支持矩阵、MDK5/GCC 快速上手的完整流程,以及通过 ENV 工具menuconfig开启 SD 卡、QSPI Flash、LCD/触摸、SDRAM、Arduino 兼容等高级功能的实操方法,并给出 384KB RAM 分区(含 64KB CCM)等关键注意事项,帮助开发者把 RT-Thread 真正跑起来并驱动更多板载资源。
一、开发板与 BSP 概览
STM32F469-ST-DISCO 是 ST 推出的 Discovery 系列评估套件,基于 ARM Cortex-M4 内核的 STM32F469 高性能 MCU,并集成 Chrom-ART Accelerator™ 图形加速器,在高端图形显示、音频、多传感器接入、WVGA 彩色显示、安全与存储扩展等场景中具备很强的代表性。
RT-Thread 开发团队为该板卡维护的 BSP 位于 bsp/stm32/stm32f469-st-disco,提供 MDK4、MDK5、IAR 与 GCC 四类构建工程(project.uvprojx、project.ewp、project.uvproj及SConstruct/SConscript),源码工程结构如下:
applications/:用户应用入口main.c,以及arduino_main.cpp、lvgl/等扩展应用示例;board/:板级初始化board.c、内存/时钟配置board.h,外设端口适配ports/(LCD OTM8009A、QSPI Flash、SD 卡、FAL 分区表),以及linker_scripts/下的 MDK/IAR/GCC 链接脚本;figures/:开发板外观图;rtconfig.h/rtconfig.py/Kconfig:默认配置、构建脚本与菜单配置源。
板载资源一览
| 资源项 | 规格 |
|---|---|
| MCU | STM32F469NIH6U,主频 180MHz,2048KB FLASH,384KB RAM(其中 64KB 为 CCM RAM) |
| 外部 RAM | N25Q128A,16MB(实际为 QSPI 接口的外部 Flash/存储,Kconfig 中标注为N25Q128A qspi1) |
| 外部 FLASH | 7LL12D9NOR,16MB |
| LED | 4 个:LD1(绿,PG6)、LD2(橙,PD4)、LD3(红,PD5)、LD4(蓝,PK3) |
| 按键 | 1 个 USER(PA0,兼具唤醒功能) |
| LCD | 4 英寸 800×480 TFT,MIPI 接口,驱动 IC 为 OTM8009A |
| 音频 | SAI 音频 DAC |
| 接口 | Arduino UNO V3、MicroSD、音频、LCD、I2C 等 |
| 调试 | 板载 ST-LINK/V2-1 SWD |
该板更多官方信息可参考 ST 官网的 32F469IDISCOVERY 产品页(见原文档引用链接,本文不再重复外链)。
二、外设支持矩阵
BSP 当前对外设的支持情况按“板载外设 / 片上外设 / 扩展模块”三类整理如下(与 BSP README 中的表格一致):
| 板载外设 | 支持 | 备注 |
|---|---|---|
| SDRAM | √ | 16MB |
| LCD | √ | MIPI LCD,OTM8009A |
| SDCARD | √ | 支持热插拔,插拔检测间隔 200ms |
| TOUCH | √ | FT6206 |
| 片上外设 | 支持 | 备注 |
|---|---|---|
| GPIO | √ | — |
| USART | √ | USART3(板载 ST-LINK 虚拟串口) |
| SPI | √ | SPI3(另有 SPI2 可配置) |
| QSPI | √ | 用于外部 Flash |
| I2C | √ | 软件 I2C(swi2c1) |
| FLASH | √ | 已适配 FAL 分区管理 |
| SDIO | √ | 驱动 SD 卡 |
| USB Device | √ | OTGFS 作为 USB 设备 |
| 扩展模块 | 支持 | 备注 |
|---|---|---|
| N/A | N/A | N/A |
需要说明的是,从当前仓库 board/Kconfig 的实际配置项看,SDRAM、QSPI Flash、SD 卡、LCD、触摸、USB 设备等驱动的“支持”均以菜单选项形式存在,默认关闭,默认开启的只有 GPIO 与 UART3。这正好对应原文档进阶使用章节“默认只开启 GPIO 和串口 3”的说明。例如:
BSP_USING_SDRAM:默认n,开启后select BSP_USING_FMC;BSP_USING_QSPI_FLASH:默认n,开启后联动使能 SFUD、FAL 等组件;BSP_USING_SDCARD:默认n,开启后联动使能 DFS 与 elmfat 文件系统;BSP_USING_LCD_OTM8009A:默认n,开启后联动BSP_USING_SDRAM、BSP_USING_LTDC与BSP_USING_LCD_MIPI;BSP_USING_TOUCH:默认由选择项决定,触摸 IC 可在 FT6206 与 FT6x36 之间选择;BSP_USING_USBD:默认n,开启 OTGFS 为 USB 设备。
三、快速上手:将 RT-Thread 跑起来
3.1 编译前准备(务必执行)
在执行任何编译工作之前,必须先在 BSP 目录下打开 RT-Thread ENV 工具,执行以下命令拉取必要的 HAL 库与 CMSIS 库,否则工程无法通过编译:
pkgs --update该命令会依据rtconfig.h中PKG_USING_STM32F4_HAL_DRIVER、PKG_USING_STM32F4_CMSIS_DRIVER、PKG_USING_CMSIS_CORE等配置从软件包索引中拉取 STM32F4 HAL 驱动与 CMSIS 依赖,这正是 rtconfig.h 中“RT-Thread online packages”段落所列出的内容。
3.2 硬件连接
使用 USB 数据线连接开发板与 PC,并打开开发板电源开关。板载 ST-LINK/V2-1 同时承担程序下载与虚拟串口(USART3)的功能,因此只需一根线即可完成下载与串口调试。
3.3 编译与下载(以 MDK5 为例)
双击工程根目录下的project.uvprojx文件打开 MDK5 工程,编译并点击 Download 按钮下载程序。
工程默认配置使用 ST-Link 仿真器下载程序;通过 ST-Link 连接开发板后,直接点击下载按钮即可将程序写入开发板。
3.4 运行结果验证
程序下载成功后系统自动运行,板载 LED LD1(绿色,PG6)开始闪烁。应用层的闪烁逻辑位于 applications/main.c:
#define LED1_PIN GET_PIN(G, 6) int main(void) { /* set LED1 pin mode to output */ rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); while (1) { rt_pin_write(LED1_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED1_PIN, PIN_LOW); rt_thread_mdelay(500); } }即通过rt_pin_mode/rt_pin_write控制 PG6 以 500ms 周期交替输出高低电平,实现 1Hz 闪烁。
随后将开发板串口连接 PC,在终端工具中以115200-8-1-N参数打开对应串口,复位设备后可看到 RT-Thread 启动输出:
\ | / - RT - Thread Operating System / | \ 4.0.1 build Apr 9 2019 2006 - 2019 Copyright by rt-thread team msh >出现msh >提示符即表示系统启动成功,可以在 FinSH 控制台输入命令(如list_device、list_thread)查看系统状态。默认控制台设备在 rtconfig.h 中定义为"uart3"(RT_CONSOLE_DEVICE_NAME),与板载 ST-LINK 虚拟串口一一对应。
四、进阶使用:用 ENV 开启更多外设
如果默认的 GPIO + UART3 无法满足需求(例如需要 SD 卡、外部 Flash、LCD、触摸屏等),可以通过 ENV 工具对 BSP 进行菜单化配置,完整流程如下:
- 在 BSP 目录(
bsp/stm32/stm32f469-st-disco)下打开 ENV 工具; - 执行
menuconfig打开配置菜单,按需勾选外设驱动后保存退出; - 执行
pkgs --update更新软件包,使依赖的驱动包(如 FAL、SFUD、FT6206、LVGL 等)生效; - 执行
scons --target=mdk4/mdk5/iar重新生成对应 IDE 工程,再打开工程编译下载。
menuconfig的配置入口由 Kconfig 定义,其中Hardware Drivers Config菜单项由 board/Kconfig 提供,分为“Onboard Peripheral Drivers(板载外设)”“On-chip Peripheral Drivers(片上外设)”“Board extended module Drivers(扩展模块)”三个子菜单。详细的菜单操作步骤可参考 RT-Thread 官方《STM32 系列 BSP 外设驱动使用教程》。
4.1 关键可配置项速查表
结合 board/Kconfig 源码,将常用配置项整理如下:
| 配置项 | 默认值 | 联动效果 | 适用场景 |
|---|---|---|---|
BSP_USING_GPIO | y | 使能RT_USING_PIN | 通用 IO 控制 |
BSP_USING_STLINK_TO_USART | y | 使能 UART3 | ST-LINK 虚拟串口 |
BSP_USING_UART3 | n | 串口 3(可开 RX/TX DMA、配置缓冲区大小) | 用户串口通信 |
BSP_USING_SDRAM | n | 使能 FMC | 外部 SDRAM |
BSP_USING_QSPI_FLASH | n | 使能 QSPI、SFUD、FAL | 外部 Flash 读写 |
BSP_USING_SDCARD | n | 使能 SDIO、DFS、elmfat、PIN | 文件系统挂载 SD 卡 |
BSP_USING_LCD_OTM8009A | n | 使能 SDRAM、LTDC、MIPI LCD | 驱动 800×480 LCD |
BSP_USING_LVGL | n | 使能 LCD + TOUCH + LVGL 软件包 | GUI 图形界面 |
BSP_USING_TOUCH(FT6206/FT6x36 二选一) | FT6x36 | 使能软件 I2C1 + 触摸软件包 | 触摸输入 |
BSP_USING_USBD | n | 使能RT_USING_USB_DEVICE | USB 从机 |
BSP_USING_ARDUINO | n | 使能 RTduino 及 ADC/PWM/TIM/SPI/软 I2C 等 | Arduino 生态兼容 |
几个值得注意的联动细节:
- LCD 依赖 SDRAM:
BSP_USING_LCD_OTM8009A会select BSP_USING_SDRAM,因为 800×480 的帧缓冲需要外部 SDRAM 承载; - 触摸依赖软件 I2C:
BSP_USING_TOUCH会select BSP_USING_SOFT_I2C与BSP_USING_SOFT_I2C1,软件 I2C1 的 SCL/SDA 引脚默认分别配置为 Pin 24 / Pin 25(RT_SOFT_I2C1_SCL_PIN_DEFAULT/RT_SOFT_I2C1_SDA_PIN_DEFAULT); - SD 卡频率可调:
SDIO_MAX_FREQ取值范围 0~24000000,默认 24000000; - QSPI Flash 可挂载文件系统:开启
BSP_USING_QSPI_FLASH后,BSP_MOUNT_QSPI_WITH_LFS(默认 y)会进一步使能 littlefs 并将 QSPI Flash 挂载为根文件系统; - UART3 支持 DMA:
BSP_UART3_RX_USING_DMA/BSP_UART3_TX_USING_DMA可分别开启收发 DMA,前提是RT_SERIAL_USING_DMA已使能(默认开启)。
4.2 验证方式
完成配置并重新编译下载后,可在 FinSH 控制台执行list_device查看新使能的外设是否出现在设备列表中;文件系统挂载成功后可用ls、mkdir等 DFS 命令进行读写验证。更完整的外设使用示例参见《STM32 系列 BSP 外设驱动使用教程》。
五、源码级佐证:默认配置与驱动端口
5.1 默认配置从何而来
menuconfig保存后生成的默认配置固化在 rtconfig.h 中,可以清晰看到:
- 内核配置:
RT_THREAD_PRIORITY_32(32 级线程优先级)、RT_TICK_PER_SECOND 100(100Hz 时钟节拍)、IDLE_THREAD_STACK_SIZE 256、RT_TIMER_THREAD_STACK_SIZE 512; - 组件配置:
RT_USING_MSH(msh 命令行)、FINSH_THREAD_STACK_SIZE 4096、FINSH_HISTORY_LINES 5、FINSH_CMD_SIZE 80; - 驱动配置:
BSP_USING_GPIO、BSP_USING_UART、BSP_USING_UART3、BSP_USING_STLINK_TO_USART; - 软件包配置:
PKG_USING_CMSIS_CORE、PKG_USING_STM32F4_HAL_DRIVER、PKG_USING_STM32F4_CMSIS_DRIVER。
这些宏正是pkgs --update与scons构建时决定编译哪些源码、拉取哪些软件包的依据。注意到rtconfig.h中RT_VER_NUM 0x50300对应 RT-Thread 5.0.3 版本,而 README 中的启动打印显示的是 4.0.1 构建产物,说明该 BSP 随仓库演进已同步更新到较新的内核版本。
5.2 内存布局:为什么 RAM 是 320KB
STM32F469NIH6U 的 RAM 为 384KB,但其中 64KB 是CCM(Core Coupled Memory)数据 RAM,只能被内核直接访问,无法被 DMA 等外设访问。因此在修改 board/board.h 与链接脚本时,不能按 384KB 配置,而应以 (384 − 64)KB = 320KB 配置:
#define STM32_SRAM_SIZE (384 - 64) #define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024)堆区(HEAP)从 BSS 段末尾(__bss_end,或 MDK 的Image$$RW_IRAM1$$ZI$$Limit、IAR 的 CSTACK 段末尾)一直延伸到STM32_SRAM_END,即堆空间覆盖 0x20000000 起的 320KB 区域。对应地,链接脚本位于 board/linker_scripts(link.sct、link.icf、link.lds分别服务于 MDK、IAR 与 GCC)。
同时,片上 Flash 的起始地址为0x08000000,总大小 2048KB(STM32_FLASH_SIZE (2048 * 1024))。若开启片上 Flash 的 FAL 分区(见下文),地址空间还会按 16KB/64KB/128KB 三种扇区粒度切分。
5.3 Flash 分区:FAL 适配
BSP 已将 Flash 适配到 FAL(Flash Abstraction Layer),分区表定义在 board/ports/fal_cfg.h:
- 片上 Flash 按扇区粒度划分为三段:
onchip_flash_16k(4×16KB)、onchip_flash_64k(1×64KB)、onchip_flash_128k(15×128KB); - 分区规划:
bootloader(16KB 区)、param(64KB 区)、app(128KB 区),另有 QSPI 外部 Flash 分区qspiflash(16MB); - 设备表
FAL_FLASH_DEV_TABLE根据BSP_USING_QSPI_FLASH与BSP_USING_ON_CHIP_FLASH的组合自动裁剪,两种 Flash 均开启时设备表包含 4 个设备。
开发者开启BSP_USING_ON_CHIP_FLASH与/或BSP_USING_QSPI_FLASH后,即可通过 FAL API 或fal命令读写分区,为 OTA 升级、参数存储、文件系统等上层应用提供统一接口。
5.4 其它端口驱动
- LCD:MIPI 屏 OTM8009A 的驱动端口位于 board/ports/drv_otm8009a.c,配合
lcd_port.h实现 LTDC 初始化与显示缓冲对接; - QSPI Flash:N25Q128A 的 SFUD 对接位于 board/ports/drv_qspi_flash.c 与
qspi_mnt.c; - SD 卡:SDIO 驱动位于 board/ports/drv_sdcard.c,支持 200ms 间隔的插拔检测;
- GUI:
applications/lvgl/下提供了 LVGL 的显示与输入设备移植(lv_port_disp.c、lv_port_indev.c、lv_conf.h),并附带 demo 示例,配合BSP_USING_LVGL配置即可获得开箱即用的图形界面; - Arduino 兼容:
applications/arduino_main.cpp与arduino_pinout/目录为 RTduino(Arduino 生态兼容层)提供支持,开启BSP_USING_ARDUINO后可使用 Arduino 风格的 API 开发。
六、注意事项与维护信息
6.1 关键注意事项
- RAM 容量陷阱:如上文所述,配置
board.h与链接脚本时必须以 320KB(384KB − 64KB CCM)为准,否则会导致堆越界或链接失败; - USART3 引脚映射:若使用 STM32CubeMX 重新生成工程,配置 USART3 时必须将引脚映射为PB10(TX)与 PB11(RX),以保证与 BSP 现有引脚分配一致;
- 编译顺序:修改 Kconfig 后务必依次执行
menuconfig→pkgs --update→scons --target=xxx,缺一不可:先更新软件包再生成工程,才能保证驱动代码与依赖库齐全; - 串口参数:控制台串口固定为 115200-8-1-N(115200 波特率、8 数据位、1 停止位、无校验)。
6.2 维护与文档
该 BSP 由 RT-Thread 开发团队维护,原文档说明该 BSP 早期由社区开发者贡献。更多 STM32 系列 BSP 的通用外设使用方法可参考 bsp/stm32/docs/STM32系列BSP外设驱动使用教程.md,BSP 制作流程可参考 bsp/stm32/docs/STM32系列BSP制作教程.md。
七、总结
本文围绕 bsp/stm32/stm32f469-st-disco 的 BSP 说明文档展开,梳理了 STM32F469-ST-DISCO 的资源全貌与默认/可扩展的外设支持情况,给出了从pkgs --update到编译下载、串口观察启动日志的完整上手路径,并深入讲解了 ENV 工具menuconfig开启 SDRAM、QSPI Flash、SD 卡、LCD/触摸、LVGL、RTduino 等高级功能的具体配置项与联动关系,最后结合 board/board.h、board/ports/fal_cfg.h 等源码确认了内存布局与 Flash 分区等底层细节。开发者只需按照快速上手章节即可在几分钟内点亮 LED 并进入 msh 控制台,再借助进阶配置章节逐步解锁这块开发板的全部潜力。
- 操作系统
- 嵌入式
- 物联网
- 嵌入式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 STM32F469-ST-DISCO 开发板 BSP 使用指南:从快速上手到外设进阶
RT Thread STM32F469 ST DISCO 开发板 BSP 使用指南:从快速上手到外设进阶 本指南围绕 RT Thread 仓库中 bsp/stm
操作系统嵌入式物联网嵌入式OSRTOSRT-Thread NUCLEO-F072RB BSP 开发指南:STM32F072RBT6 快速上手与进阶外设配置
RT Thread NUCLEO F072RB BSP 开发指南:STM32F072RBT6 快速上手与进阶外设配置 导读 本文是基于 RT Thread 开源
操作系统嵌入式物联网嵌入式OSRTOSRT-Thread 在 ST NUCLEO-WB55(STM32WB55)开发板上的 BSP 应用指南:快速上手与进阶外设配置
RT Thread 在 ST NUCLEO WB55(STM32WB55)开发板上的 BSP 应用指南:快速上手与进阶外设配置 本篇指南以 RT Thread
操作系统嵌入式物联网嵌入式OSRTOS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考