ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

RT-Thread 之 STM32H750-armfly-h7-tool BSP 实践:从快速上手到外设驱动深度配置

2026/9/28 2:38:49 拓冰建站 浏览量
RT-Thread 之 STM32H750-armfly-h7-tool 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/stm32/stm32h750-armfly-h7-tool/README.md 为骨架围绕安富莱 H7-TOOL 开发板的 BSP板级支持包展开先带你通过 MDK5/IAR/GCC 将 RT-Thread 系统在 STM32H750 上跑起来再深入 ENV menuconfig 的外设配置流程最后结合 BSP 源码剖析其 400MHz 时钟树、内存布局与 OTA 向量表重定位等底层细节。读完本文你将具备该开发板的完整上手能力并掌握从点灯到按需开启 ESP32、以太网、QSPI Flash、USB 等外设的进阶方法。开发板与 BSP 概览STM32H750-armfly-h7-tool简称 H7-TOOL是安富莱推出的一款基于 ARM Cortex-M7 内核的开发板最高主频 400MHz。该 BSP 由 zylx 维护是一套完整的 RT-Thread 板级支持包包含应用层、板级初始化、链接脚本以及 MDK5 / IAR / GCC 三套构建工程应用层入口applications/main.c板级初始化board/board.c时钟、堆内存等外设配置菜单board/Kconfig构建工程project.uvprojxMDK5、project.ewpIAR、SConstruct/SConscriptGCC/SCons开发板外观如下图所示该开发板的常用板载资源如下MCUSTM32H750主频 400MHz2MB FLASH、1MB RAM常用接口USB 转串口、以太网接口、DAC 接口、电流检测接口等调试接口标准 SWD。注原文档指向的 H7-TOOL 开发工具论坛帖子属外部链接此处不再重复给出开发板的更多硬件细节可查阅安富莱官方资料。BSP 外设支持矩阵根据原 BSP 说明当前该 BSP 对外设的支持情况如下板载外设支持情况备注LCD待支持ESP32支持AT 固件片上外设支持情况备注GPIO支持UART支持UART1USB Device支持USB HS从 board/Kconfig 的配置项看该 BSP 实际预留的可扩展外设远不止上表所列包括QSPI FlashW25Q256、以太网LAN8720A PHY、LCD、ESP32UART4 AT 组件、软件 I2C、PWM、ADC、SDIO 以及 OTG HS USB 设备等均可通过 menuconfig 按需开启详见进阶使用章节。快速上手让 RT-Thread 在 H7-TOOL 上跑起来本 BSP 为开发者提供MDK5和IAR工程并支持GCC开发环境。下面以 MDK5 开发环境为例介绍如何将系统运行起来。第 0 步务必先拉取 HAL 库与 CMSIS 库重要在执行编译工作前请先打开 ENV 执行以下指令该指令用于拉取必要的 HAL 库及 CMSIS 库否则无法通过编译pkgs --update这一要求与仓库实际依赖完全吻合查看 rtconfig.h 可以看到BSP 通过软件包引入PKG_USING_STM32H7_HAL_DRIVERSTM32H7 HAL 驱动与PKG_USING_CMSIS_CORECMSIS Core这些包必须经过pkgs --update从软件包索引下载到本地packages目录后构建脚本才能找到对应头文件与源码。硬件连接使用数据线连接开发板到 PC将TVCC接到3.3V使用 USB 转串口工具连接TTLRX和TTLTX两个引脚。编译下载双击 project.uvprojx 打开 MDK5 工程编译并下载程序到开发板。工程默认配置使用 ST_LINK 仿真器下载程序在通过 ST_LINK 连接开发板的基础上点击下载按钮即可将程序下载到开发板。如需改用其他下载器如 DAP-Link、J-Link可在 MDK 的 Debug 选项里切换调试器并配置对应的下载算法。运行结果下载程序成功后系统会自动运行开发板上的 LED 开始闪烁。该逻辑实现在 applications/main.c 中/* defined the LED0 pin: PI8 */ #define LED0_PIN GET_PIN(I, 8) int main(void) { /* set LED0 pin mode to output */ rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); while (1) { rt_pin_write(LED0_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED0_PIN, PIN_LOW); rt_thread_mdelay(500); } }即默认示例通过 RT-Thread 的 PIN 设备框架将PI8配置为推挽输出以 500ms 周期翻转电平实现 LED 闪烁——这同时验证了 BSP 的 GPIO 驱动与内核调度都已正常工作。连接开发板对应串口到 PC在终端工具中打开相应串口115200-8-1-N复位设备后可以看到 RT-Thread 的输出信息\ | / - RT - Thread Operating System / | \ 4.0.2 build Oct 25 2019 2006 - 2019 Copyright by rt-thread team msh 出现msh 提示符即表示系统已正常运行此时即可在命令行里交互操作查看线程、内存、设备等 finsh/msh 命令。进阶使用基于 menuconfig 开启更多板载外设此 BSP 默认只开启了 GPIO 和串口 1 的功能查看 rtconfig.h 可见默认使能BSP_USING_GPIO、BSP_USING_UART1与BSP_USING_UART4。如需使用更多高级功能需要利用 ENV 工具对 BSP 进行配置步骤如下在 bsp 目录下打开 ENV 工具输入menuconfig命令配置工程配置好后保存退出输入pkgs --update命令更新软件包输入scons --targetmdk4/mdk5/iar命令重新生成工程按需选择目标本 BSP 主要使用 mdk5/iar。之后重新打开生成的工程编译下载即可。整个配置流程对应的菜单项定义在 board/Kconfig 中下面结合该文件逐项说明。板载外设配置Onboard Peripheral Drivers菜单项Kconfig 选项开启后自动关联说明QSPI FLASH (W25Q256)BSP_USING_QSPI_FLASHQSPI 总线、SFUD 组件板载 32MB SPI NOR Flash用于文件系统/固件存储EthernetBSP_USING_ETHlwIP、PHY_USING_LAN8720A板载以太网PHY 为 LAN8720ALCDBSP_USING_LCDPWM背光当前 BSP 文档标记为待支持ESP32BSP_USING_ESP32UART4、AT 组件、AT 客户端、Socket、AT_DEVICE_USING_ESP32板载 ESP32 模块运行 AT 固件用于 Wi-Fi 联网其中 ESP32 选项值得展开开启后会通过 UART4 与 ESP32 模块通信并引入PKG_USING_AT_DEVICE软件包开发者即可在 RT-Thread 中直接使用标准 socket 接口联网而无需关心 AT 指令细节。片上外设配置On-chip Peripheral DriversGPIOBSP_USING_GPIO默认开启提供rt_pin_*接口对应 RT-Thread PIN 设备框架。UARTBSP_USING_UART默认开启默认使能 UART1 与 UART4每个串口均可独立配置BSP_UART1_RX_USING_DMA/BSP_UART1_TX_USING_DMA接收/发送 DMA需要RT_SERIAL_USING_DMA默认关闭BSP_UARTx_RX_BUFSIZE接收缓冲区大小范围 64~65535默认 256BSP_UARTx_TX_BUFSIZE发送缓冲区大小范围 0~65535默认 0BSP_UARTx_DMA_PING_BUFSIZEDMA 乒乓缓冲大小范围 32~65535默认 64需开启 RX DMA。QSPI 总线BSP_USING_QSPI供 W25Q256 等 QSPI Flash 使用可另开BSP_QSPI_USING_DMA提升读写吞吐。软件 I2CBSP_USING_SOFT_I2C1默认 SCL 135、SDA 95对应RT_SOFT_I2C1_SCL_PIN/RT_SOFT_I2C1_SDA_PIN两个可调配置项。PWMBSP_USING_PWM2_CH2定时器 2 输出 PWM可用于 LCD 背光等场景。ADCBSP_USING_ADC1/2/3配合板上电流检测、DAC 接口使用。SDIOBSP_USING_SDIO开启后会同时引入RT_USING_DFS文件系统组件用于读写 SD 卡。USB DeviceBSP_USING_USBD将 OTG HS 配置为 USB 设备HS 速度、ULPI 外部 PHY 方案即文档中USB Device 支持USB HS的对应配置。配置并重新生成工程后对应驱动会由libraries/HAL_Drivers自动纳入编译见 board/Kconfig 末尾source $(BSP_DIR)/../libraries/HAL_Drivers/drivers/Kconfig。进阶章节更详细的介绍请参考 STM32 系列 BSP 外设驱动使用教程。源码视角时钟、内存布局与启动细节400MHz 主频的时钟树配置board/board.c 中的SystemClock_Config()完整配置了 H7 复杂的时钟树电源与电压档位PWR_LDO_SUPPLYPWR_REGULATOR_VOLTAGE_SCALE1VOS1 档支撑 400MHz 高频PLL 主锁相环PLLM5, PLLN160, PLLP2从配置数值可以推断其设计目标是让 SYSCLK 达到400MHzVCO 输出经 PLLP 二分频后供内核配合RCC_SYSCLK_DIV1、HCLKDIV2等分频器AHB/APB 总线按需降频外设时钟独立配置了 PLL2供 ADC、QSPI 等、UART1/UART4D2PCLK源、RNGHSI48 源、SDMMC 等外设时钟选择。内存与 Flash 布局为 Bootloader/OTA 预留空间board/board.h 中定义了本 BSP 的内存视图#define STM32_FLASH_START_ADRESS ((uint32_t)0x08020000) #define STM32_FLASH_SIZE (1920 * 1024) #define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS STM32_FLASH_SIZE)) #define STM32_SRAM_SIZE (128) #define STM32_SRAM_END (0x20000000 STM32_SRAM_SIZE * 1024)值得注意Flash 起始地址为0x08020000而非 0x08000000即预留了前 128KB 给 Bootloader/OTA 升级程序BSP 使用的 Flash 空间为起始地址后的 1920KB。这与 board/board.c 中自动执行的向量表重定位逻辑完全对应static int ota_app_vtor_reconfig(void) { #define RT_APP_PART_ADDR 0x08020000 #define NVIC_VTOR_MASK 0x3FFFFF80 /* Set the Vector Table base location by user application firmware definition */ SCB-VTOR RT_APP_PART_ADDR NVIC_VTOR_MASK; return 0; } INIT_BOARD_EXPORT(ota_app_vtor_reconfig);该函数通过INIT_BOARD_EXPORT在板级初始化阶段自动注册执行应用启动后将 Cortex-M7 的中断向量表VTOR重定位到 0x08020000确保中断能够正确分发。由此可以看出此 BSP 从一开始就是按Bootloader 应用双分区结构设计的可直接支持后续的 OTA 升级方案。此外堆内存HEAP的起点HEAP_BEGIN针对 MDKImage$$RW_IRAM1$$ZI$$Limit、IARCSTACK段末尾与 GCC__bss_end三种工具链分别做了适配堆末尾HEAP_END指向 128KB SRAM 的顶端配合RT_USING_SMALL_MEM_AS_HEAP为内核与组件提供动态内存。工具链与构建参数rtconfig.py 中针对三种工具链分别给出了编译参数GCC-mcpucortex-m7 -mthumb -mfpufpv5-d16 -mfloat-abihard链接脚本为board/linker_scripts/link.lds产物经 objcopy 生成rtthread.binMDK (armcc)--cpu Cortex-M7.fp.sp散射文件board/linker_scripts/link.sctIAR (iccarm)--cpuCortex-M7--fpuVFPv5_sp配置文件board/linker_scripts/link.icf。BSP 在 board/SConscript 中通过CPPDEFINES [STM32H750xx]指定芯片型号并将board.c与 CubeMX 生成的stm32h7xx_hal_msp.c纳入编译。注意事项调试串口映射BSP 默认的调试串口为串口 1RT_CONSOLE_DEVICE_NAME uart1引脚映射如下PA10 ------ USART1_RX PA9 ------ USART1_TX连接终端时请按115200-8-1-N参数打开串口并注意与 USB 转串口工具的 TTLRX / TTLTX 交叉连接。维护信息该 BSP 由社区开发者 zylx 维护。如需反馈问题或提交改进可在 RT-Thread 仓库的 bsp/stm32/stm32h750-armfly-h7-tool 目录下查看源码与文档并结合 STM32 系列外设驱动添加指南 学习如何为新的板载外设编写驱动。赞分享操作系统嵌入式物联网嵌入式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点击查看免费下载相关推荐LifeOS 如何为 Pulse 编写自定义 check 脚本并注册为定时任务LifeOS 如何为 Pulse 编写自定义 check 脚本并注册为定时任务 这篇文章面向已经在本机跑起 PulseLifeOS 的统一守护进程macOS操作系统嵌入式物联网嵌入式OSRTOS在 LifeOS 中用 t_threat_model_plans 模式对人生计划进行威胁建模从 TELOS 文件到风险应对的实战指南在 LifeOS 中用 t_threat_model_plans 模式对人生计划进行威胁建模从 TELOS 文件到风险应对的实战指南 导读 本文围绕 Life操作系统嵌入式物联网嵌入式OSRTOSRT-Thread NUCLEO-G491RE BSP 开发指南从快速上手到外设驱动配置RT Thread NUCLEO G491RE BSP 开发指南从快速上手到外设驱动配置 本篇技术指南以 RT Thread 仓库中 NUCLEO G491R操作系统嵌入式物联网嵌入式OSRTOS上一篇AWS CLI 实战使用 update-repository-description 修改 CodeCommit 仓库描述下一篇Redux Thunk性能调优从渲染到网络请求创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考