☰
RT-Thread STM32F469-ST-DISCO BSP 开发指南:从资源解析到快速上手与进阶外设配置
2026/9/28 21:23:43 网站建设 项目流程
  • 操作系统
  • 嵌入式
  • 物联网
  • 嵌入式OS
  • RTOS

【免费下载链接】rt-thread

RT-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 官方为 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:默认配置、构建脚本与菜单配置源。

板载资源一览

资源项规格
MCUSTM32F469NIH6U,主频 180MHz,2048KB FLASH,384KB RAM(其中 64KB 为 CCM RAM)
外部 RAMN25Q128A,16MB(实际为 QSPI 接口的外部 Flash/存储,Kconfig 中标注为N25Q128A qspi1)
外部 FLASH7LL12D9NOR,16MB
LED4 个:LD1(绿,PG6)、LD2(橙,PD4)、LD3(红,PD5)、LD4(蓝,PK3)
按键1 个 USER(PA0,兼具唤醒功能)
LCD4 英寸 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/AN/AN/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 进行菜单化配置,完整流程如下:

  1. 在 BSP 目录(bsp/stm32/stm32f469-st-disco)下打开 ENV 工具;
  2. 执行menuconfig打开配置菜单,按需勾选外设驱动后保存退出;
  3. 执行pkgs --update更新软件包,使依赖的驱动包(如 FAL、SFUD、FT6206、LVGL 等)生效;
  4. 执行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_GPIOy使能RT_USING_PIN通用 IO 控制
BSP_USING_STLINK_TO_USARTy使能 UART3ST-LINK 虚拟串口
BSP_USING_UART3n串口 3(可开 RX/TX DMA、配置缓冲区大小)用户串口通信
BSP_USING_SDRAMn使能 FMC外部 SDRAM
BSP_USING_QSPI_FLASHn使能 QSPI、SFUD、FAL外部 Flash 读写
BSP_USING_SDCARDn使能 SDIO、DFS、elmfat、PIN文件系统挂载 SD 卡
BSP_USING_LCD_OTM8009An使能 SDRAM、LTDC、MIPI LCD驱动 800×480 LCD
BSP_USING_LVGLn使能 LCD + TOUCH + LVGL 软件包GUI 图形界面
BSP_USING_TOUCH(FT6206/FT6x36 二选一)FT6x36使能软件 I2C1 + 触摸软件包触摸输入
BSP_USING_USBDn使能RT_USING_USB_DEVICEUSB 从机
BSP_USING_ARDUINOn使能 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 关键注意事项

  1. RAM 容量陷阱:如上文所述,配置board.h与链接脚本时必须以 320KB(384KB − 64KB CCM)为准,否则会导致堆越界或链接失败;
  2. USART3 引脚映射:若使用 STM32CubeMX 重新生成工程,配置 USART3 时必须将引脚映射为PB10(TX)与 PB11(RX),以保证与 BSP 现有引脚分配一致;
  3. 编译顺序:修改 Kconfig 后务必依次执行menuconfig→pkgs --update→scons --target=xxx,缺一不可:先更新软件包再生成工程,才能保证驱动代码与依赖库齐全;
  4. 串口参数:控制台串口固定为 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/

项目地址:https://gitcode.com/gh_mirrors/rt/rt-thread
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询