ARTICLE DETAIL

建站实战干货

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

RT-Thread 的 STM32L4R5ZI-NUCLEO 开发板 BSP:快速上手、外设驱动配置与内存布局实战指南

2026/9/28 2:43:50 拓冰建站 浏览量
RT-Thread 的 STM32L4R5ZI-NUCLEO 开发板 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点击查看免费下载STM32L4R5ZI-NUCLEO 是 ST 官方 NUCLEO-144 板型的评估开发板主控为 STM32L4R5ZICortex-M4F最高主频 120MHz内置 2048KB FLASH 与 640KB RAM。本文以 RT-Thread 仓库中的 BSP 说明文档 为主线结合 板级源码、Kconfig 配置、链接脚本 等仓库资源系统讲解该 BSP 的板载资源、外设支持现状、MDK5/IAR/GCC 三套工程的快速上手流程、基于 ENV 工具的进阶外设配置方法以及 STM32L4R5ZI 三块内部 RAM 的内存布局与堆空间分配原理。读完本文你将能够在几分钟内把 RT-Thread 跑上开发板并掌握通过 menuconfig 开启 USB、片上 Flash、SPI、PWM 等外设驱动并重新生成工程的完整技能。开发板与 BSP 概览该 BSP 由维护人 QYZ 为 STM32L4R5ZI-NUCLEO 开发板提供属于 RT-Thread STM32 系列 BSP 家族 的一员。BSP 目录结构清晰主要包含applications/main.c用户入口默认实现 LED 闪烁示例board/board.c、board/board.h系统时钟配置、FLASH/SRAM 布局与堆区定义board/CubeMX_Config由 STM32CubeMX 生成的工程含STM32L4R5ZITx.ioc供开发者参考底层引脚与时钟配置board/linker_scriptsGCClds、IARicf、MDKsct三套链接脚本board/Kconfig硬件驱动配置菜单ENV 工具 menuconfig 的外设开关入口工程文件project.uvprojxMDK5、project.ewwIAR、project.ewpIAR 工程以及对应的template.*模板文件rtconfig.h当前工程的 RT-Thread 配置头文件由 menuconfig 自动生成。在顶层 Kconfig 中BSP 通过SOC_STM32L4R5ZI归属SOC_SERIES_STM32L4系列与BOARD_STM32L4R5_NUCLEO归属BOARD_SERIES_STM32_NUCLEO_144板型两个配置符号接入 STM32 系列的统一配置体系SConscript 则为整个工程追加了STM32L4R5xx编译宏驱动 HAL 库按对应芯片型号编译。板载资源一览开发板常用板载资源如下MCUSTM32L4R5ZI主频最高 120MHz2048KB FLASH640KB RAM状态指示灯3 个LD1 ~ LD3按键2 个调试器板载 ST-LINK常用接口USB OTG Micro USB 接口调试接口ST-LINK Micro USB 接口。开发板更详细的技术资料可参考 ST 官方对 NUCLEO-L4R5ZI 的评估板介绍本文不再展开外部链接。值得注意的一点是BSP 说明文档中引用的开发板图片原为figures/board.bmp仓库中实际存放的文件为 figures/board.jpg即上文展示的外观图。外设支持现状本 BSP 目前对外设的支持情况如下表所示板载外设支持情况备注板载 ST-LINK 转串口支持PG7 PG8 LPUART1SRAM支持384K 外部 SRAM 区作为堆空间使用详见后文内存布局片上外设支持情况备注GPIO支持通过 RT-Thread PIN 设备框架UART支持USART3另有 LPUART1 默认作为调试串口从 rtconfig.h 可以确认当前默认开启的配置BSP_USING_GPIO、BSP_USING_LPUART1串口设备框架采用RT_USING_SERIAL_V1控制台设备名称为lpuart1RT_CONSOLE_DEVICE_NAME。也就是说BSP 默认只开启了 GPIO 与 LPUART1 两项功能其余外设USB、片上 Flash、WDT、ADC、RTC、SPI、软件 I2C、定时器、PWM 等均需通过 ENV 工具按需开启。快速上手把 RT-Thread 跑起来本 BSP 同时为开发者提供 MDK5 工程project.uvprojx与 IAR 工程project.eww/project.ewp并完整支持 GCC 开发环境配套 link.lds 链接脚本与SConstruct/rtconfig.py。下面以 IAR 开发环境为例介绍完整的上电运行流程。硬件连接使用 USB 数据线将开发板的 ST-LINK Micro USB 接口连接到 PC打开开发板电源开关。编译下载双击打开project.eww文件在 IAR 中编译工程并将程序下载到开发板。工程默认配置使用板载 ST-LINK仿真器下载程序。在通过 ST-LINK 正确连接开发板的前提下直接点击下载按钮即可将程序烧录到开发板MDK5 用户则双击打开 project.uvprojx其默认调试器配置同样为板载 ST-LINK。运行结果下载程序成功后系统自动运行。观察开发板上的 LEDmain.c 中默认以LED3_PIN即 PB14作为运行指示灯主循环中每 500ms 翻转一次电平因此可以看到 LED 周期性闪烁#define LED1_PIN GET_PIN(C, 7) /* LED1: PC7 */ #define LED2_PIN GET_PIN(B, 7) /* LED2: PB7 */ #define LED3_PIN GET_PIN(B, 14) /* LED3: PB14 */ #define LED_RUN_PIN LED3_PIN /* 运行指示灯PB14 */ int main(void) { rt_pin_mode(LED_RUN_PIN, PIN_MODE_OUTPUT); while (1) { rt_pin_write(LED_RUN_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED_RUN_PIN, PIN_LOW); rt_thread_mdelay(500); } }随后连接开发板对应串口到 PC板载 ST-LINK 转串口即 LPUART1映射到 PG7/PG8在终端工具中打开该串口参数115200-8-1-N即波特率 115200、8 位数据、1 位停止位、无校验复位设备后即可看到 RT-Thread 的启动输出信息\ | / - RT - Thread Operating System / | \ 4.0.1 build Apr 4 2019 2006 - 2019 Copyright by rt-thread team msh 出现msh 提示符即代表系统启动成功此时已进入 RT-Thread 的 FinSH 命令行msh可以使用list_device、ps等命令查看系统状态。进阶使用用 ENV 工具开启更多外设此 BSP 默认只开启了 GPIO 和 LPUART1如需使用 USB、Flash 等更多高级功能需要利用 ENV 工具对 BSP 进行配置。整体流程如下在 BSP 目录即bsp/stm32/stm32l4r5-st-nucleo下打开 ENV 工具输入menuconfig命令进入配置界面完成配置后保存退出生成的配置会写入rtconfig.h输入pkgs --update命令更新软件包输入scons --targetmdk5MDK5或scons --targetiarIAR命令重新生成工程。重新生成工程后需要用新生成的工程文件重新编译下载配置改动才会生效。更详细的逐步操作演示可参考仓库内的 STM32 系列 BSP 外设驱动使用教程其中以在正点原子阿波罗 F429 开发板上开启 SPI Flash 驱动为例完整展示了 menuconfig 选配、pkgs --update更新软件包、scons --targetmdk5 -s重建工程以及list_device验证设备注册的全过程。可配置外设详解board/Kconfigboard/Kconfig 定义了本 BSP 的全部硬件驱动开关按下述菜单组织板载外设Onboard Peripheral DriversBSP_USING_STLINK_TO_USART默认开启启用 ST-LINK 转串口lpuart1自动连带开启BSP_USING_UART与BSP_USING_LPUART1。片上外设On-chip Peripheral DriversBSP_USING_GPIO默认开启启用 GPIO自动开启RT_USING_PINPIN 设备框架。BSP_USING_UART默认开启UART 总开关自动开启RT_USING_SERIAL。其下可配置BSP_STM32_UART_V1_TX_TIMEOUTUART v1 框架发送超时默认 2000msRT_SERIAL_USING_DMA是否启用串口 DMA 通道默认关闭BSP_USING_LPUART1默认开启LPUART1可单独开启BSP_LPUART1_RX_USING_DMA依赖 DMA 总开关BSP_USING_UART1~BSP_USING_UART5默认关闭五路 UART每路均可配置 RX/TX DMA 开关以及在 v2 串口框架下的 RX 缓冲默认 256、TX 缓冲默认 256和 DMA ping-pong 缓冲默认 64大小。BSP_USING_ON_CHIP_FLASH默认关闭片上 Flash 驱动。BSP_USING_USBD默认关闭将 OTGFS 作为 USB 设备使用自动开启RT_USING_USB_DEVICE。BSP_USING_WDT默认关闭看门狗自动开启RT_USING_WDT。BSP_USING_ADC默认关闭ADC 总开关可进一步开启 ADC1。BSP_USING_ONCHIP_RTC默认关闭RTC自动开启RT_USING_RTC并提供时钟源选择BSP_RTC_USING_LSE与BSP_RTC_USING_LSI二选一默认 LSE。BSP_USING_SPI默认关闭SPI 总线总开关自动开启RT_USING_SPI其下 SPI1 ~ SPI3 均可单独开启并支持 TX/RX DMA注意BSP_SPIx_RX_USING_DMA会自动连带选中 TX DMA。BSP_USING_SOFT_I2C默认关闭软件 I2Cswi2c自动开启RT_USING_I2C与RT_USING_SOFT_I2C其下 swi2c1/swi2c2 两条总线可分别指定 SCL/SDA 引脚号默认值见 Kconfig。BSP_USING_TIM默认关闭定时器自动开启RT_USING_CLOCK_TIME其下可开启 TIM1/TIM2/TIM3。BSP_USING_PWM默认关闭PWM自动开启RT_USING_PWMPWM1 的 CH1~CH4 对应引脚 PA8/PA9/PA10/PA11可逐通道开启。从这些配置项可以看出BSP 遵循 RT-Thread 标准驱动框架的总开关 具体外设开关 DMA/缓冲细化三层结构配置项通过 Kconfig 的select/depends on自动完成依赖联动例如开启BSP_USING_STLINK_TO_USART会自动勾选串口框架与 LPUART1减少人为配置错误。内存布局三块内部 RAM 的分配与使用STM32L4R5ZI 共有三块内部 RAM 区域本 BSP 的具体使用情况如下与 board/linker_scripts/link.lds 中的 MEMORY 定义一致RAM1 (rw) : ORIGIN 0x20000000, LENGTH 192k /* 192K sram 用于程序定义全局变量 静态变量存放*/ RAM2 (rw) : ORIGIN 0x10000000, LENGTH 64k /* 64K sram 暂未使用 */ RAM3 (rw) : ORIGIN 0x20040000, LENGTH 384k /* 384K sram 用于heap空间*/RAM10x20000000192KB常规 SRAM链接脚本中.data、.bss、.stack均落在此区用于存放程序定义的全局变量与静态变量RAM20x1000000064KB暂未使用对应 link.lds 中的 RAM3 区当前未放置任何段RAM30x20040000384KB用作 RT-Thread 的堆heap空间。堆区定义在 board/board.h 中以宏方式给出#define STM32_SRAM3_SIZE (384) #define STM32_SRAM3_START (0x20040000) #define STM32_SRAM3_END (STM32_SRAM3_START STM32_SRAM3_SIZE * 1024) #define HEAP_BEGIN STM32_SRAM3_START #define HEAP_END STM32_SRAM3_ENDHEAP_BEGIN/HEAP_END即 RT-Thread 动态内存管理的起始与结束地址配合 rtconfig.h 中的RT_USING_HEAP、RT_USING_SMALL_MEM_AS_HEAP等配置rt_malloc/rt_free以及 FinSH 的free命令都会在这 384KB 堆空间上工作。这种静态变量与动态堆分离的布局让 640KB 总 RAM 的利用率更高也便于在内存规划时估算堆余量。时钟与调试串口的底层实现系统时钟配置board.cboard.c 的 SystemClock_Config 完成了系统时钟初始化关键配置如下电压调节模式设为PWR_REGULATOR_VOLTAGE_SCALE1_BOOST最高性能档这也是芯片达到高主频的前提时钟源选用内部HSI16MHz经 PLL 倍频分频PLLM2、PLLN25、PLLR2另配置 PLLP/PLLQDIV2后作为系统时钟AHB 不分频DIV1APB1/APB2 各二分频DIV2FLASH 等待周期为 4FLASH_LATENCY_4为 LPUART1 单独配置外设时钟RCC_LPUART1CLKSOURCE_HSI即 LPUART1 以 HSI16MHz作为时钟源。需要说明的是README 中标称的主频 120MHz为芯片规格上限而上述 PLL 配置16MHz ÷ 2 × 25 ÷ 2 100MHz得到的 SYSCLK 为 100MHz具体运行频率以 board.c 实际配置为准开发者如需运行在更高主频可依据 STM32L4 系列时钟树重新调整 PLL 参数。LPUART1 调试串口PG7/PG8调试串口为 LPUART1映射到PG7TX/ PG8RX这一点在以下多处源码与配置中相互印证STM32L4R5ZITx.iocCubeMX 工程文件PG7.SignalLPUART1_TX、PG8.SignalLPUART1_RX均配置为异步模式、上拉、高速LPUART1 时钟源选择RCC_LPUART1CLKSOURCE_HSI16MHzstm32l4xx_hal_msp.cLPUART1 的 MSP 初始化中使能__HAL_RCC_LPUART1_CLK_ENABLE()并将 PG7/PG8 配置为GPIO_AF8_LPUART1复用功能rtconfig.hRT_CONSOLE_DEVICE_NAME lpuart1控制台msh 终端直接挂载到 LPUART1 设备上因此串口终端看到的启动 LOG 与msh 提示符均来自该串口。注意事项与维护信息调试串口为 LPUART1映射到 PG7/PG8串口参数为 115200-8-1-N切勿接错引脚或波特率三块内部 RAM 的功能划分全局/静态变量、暂未使用、heap以内存布局一节为准修改链接脚本或堆地址宏时需要同步调整避免段重叠默认工程使用板载 ST-LINK 下载若更换外部调试器需要在 MDK/IAR 中修改调试器配置通过 menuconfig 开启新外设后必须执行scons --targetmdk5/iar重新生成工程并重新编译下载本 BSP 说明文档由维护人 QYZ 提供并持续维护如需反馈问题或参与改进可在 RT-Thread 仓库中定位到bsp/stm32/stm32l4r5-st-nucleo目录及其 README.md 的维护人信息。赞分享操作系统嵌入式物联网嵌入式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点击查看免费下载相关推荐STM32F091RC-NUCLEO 开发板 RT-Thread BSP 使用指南快速上手与外设驱动配置STM32F091RC NUCLEO 开发板 RT Thread BSP 使用指南快速上手与外设驱动配置 NUCLEO F091RC 是意法半导体推出的基于操作系统嵌入式物联网嵌入式OSRTOSRT-Thread NUCLEO-G491RE BSP 开发指南从快速上手到外设驱动配置RT Thread NUCLEO G491RE BSP 开发指南从快速上手到外设驱动配置 本篇技术指南以 RT Thread 仓库中 NUCLEO G491R操作系统嵌入式物联网嵌入式OSRTOSRT-Thread NUCLEO-F767ZI 开发板 BSP 详解从快速上手到外设驱动配置实战RT Thread NUCLEO F767ZI 开发板 BSP 详解从快速上手到外设驱动配置实战 导读 本文以 bsp/stm32/stm32f767 st操作系统嵌入式物联网嵌入式OSRTOS上一篇QuickJS日期对象完全解析深入分析Date API源码实现下一篇OpenSpeedy设计系统文档组件规范与示例创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考