RT-Thread STM32 Nucleo-144 BSP 开发指南:板卡资源、MDK5 快速上手与 ENV 高级外设配置

  • 操作系统
  • 嵌入式
  • 物联网
  • 嵌入式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 开源仓库中 STM32_Nucleo-144_BSP_Introduction.md 的完整技术指南。该 BSP(板级支持包)由 RT-Thread 开发团队为 STM32 Nucleo-144 系列开发板提供,覆盖板卡资源介绍、MDK/IAR/GCC 多工具链快速上手流程,以及通过 ENV 工具扩展 SPI、I2C 等外设驱动的高级配置方法。读完本文,你将掌握在 Nucleo-144 板卡上从零编译下载 RT-Thread、观察 msh 控制台输出,以及使用 menuconfig + scons 定制外设驱动工程的完整实战能力。

一、资源介绍(Resources Introduction)

1.1 板卡描述

STM32 Nucleo-144 开发板为用户提供了一种高性价比、高灵活性的原型开发方式:开发者可以在 STM32 微控制器提供的多种性能与功耗组合中自由选择。部分兼容板卡还支持内部或外部 SMPS(开关电源),可显著降低 Run 模式下的功耗。

在扩展性方面,板卡提供了两大关键接口:

  • ST Zio 扩展连接器:兼容 ARDUINO® Uno V3 排针布局,可复用大量现成扩展板(shield);
  • ST morpho 排针:提供全引脚引出,便于灵活搭建自定义电路。

Nucleo-144 板卡无需额外的调试探针——板载 ST-LINK 调试器/编程器 即支持烧录与调试;同时随附 STM32Cube MCU 软件包中完整的免费软件库与示例。板卡外观与整体布局如下图所示:

STM32 Nucleo-144 开发板外观

STM32 Nucleo-144 开发板布局说明

关于这些板卡的更多官方信息,可参考 ST 官方网站的 Nucleo 系列评估板页面(ST Nucleo Official Website)。

1.2 通用特性

  • STM32 微控制器,采用 LQFP144 封装;
  • 3 个用户 LED;
  • 2 个用户按键和 1 个复位按键;
  • 32.768 kHz 晶体振荡器;
  • 板载连接器:
    • SWD 调试接口;
    • ST Zio 扩展连接器(含 ARDUINO® Uno V3 兼容排针);
    • ST morpho 扩展连接器;
  • 灵活的供电方式:ST-LINK、USB VBUS 或外部电源;
  • 板载 ST-LINK 调试器/编程器,支持 USB 重枚举能力:大容量存储(Mass Storage)、虚拟串口(Virtual COM port)和调试端口(Debug port);
  • 随附 STM32Cube MCU 软件包中的完整免费软件库与示例;
  • 支持多种主流集成开发环境(IDE),包括 IAR™、Keil® 和 STM32CubeIDE。

1.3 板卡专属特性

  • 外部或内部 SMPS,用于产生 Vcore 逻辑电源;
  • 符合 IEEE-802.3-2002 标准的 以太网 接口;
  • USB OTG 全速(或仅设备模式);
  • 板载连接器:
    • USB(Micro-AB 或 USB Type-C™);
    • 以太网 RJ45 接口;
  • 符合 Arm® Mbed Enabled™ 规范。

在 RT-Thread 仓库中,Nucleo-144 板型对应的 BSP 位于 bsp/stm32 目录下,例如 stm32f746-st-nucleo(STM32F746ZG,LQFP144 封装)等。仓库还提供了同系列的 Nucleo-64 板卡指南 STM32_Nucleo-64_BSP_Introduction.md,两者配合阅读可全面了解 RT-Thread 对 ST 官方评估板的支持情况。

二、快速上手(Quickly Get Started)

本 BSP 为开发者同时提供了 MDK4、MDK5、IAR 工程,并支持 GCC 开发环境。下文以 MDK5(Keil)环境为例,演示如何运行 RT-Thread。

2.1 硬件连接

使用 Type-A 转 Mini-B USB 线缆将开发板连接到 PC,并打开电源开关。此时板上的 LD3(PWR)电源指示灯 与 LD1(COM)通信指示灯 会点亮,表示板卡已正常供电并完成 USB 枚举。

2.2 编译与下载(MDK5 步骤)

  1. 双击打开 project.uvprojx 文件以启动 MDK-Keil5 工程(注意:不是 template.uvprojx 模板工程)。该工程文件位于 BSP 根目录,例如 stm32f746-st-nucleo/project.uvprojx;
  2. 点击 “Option for Target”(工程选项)按钮:
    • Debug 选项卡:选择 "ST-LINK Debugger",并点击 "Setting" 按钮:
      • Port 选择 SW(Serial Wire);
      • Flash Download 选项中勾选 Reset and Run(下载后自动复位运行);
  3. 编译并下载程序到开发板。

2.3 运行结果

程序下载成功后系统自动运行。观察板载 LED 状态:LD3 与 LD1 常亮,LD2 周期性闪烁。

板卡的 USB 虚拟串口默认连接到 USART3。在终端工具中以 115200-8-1-N(波特率 115200、8 位数据、1 位停止位、无校验)打开对应串口后,复位设备即可看到 RT-Thread 的启动信息:

 \ | /
- RT -     Thread Operating System
 / | \     4.0.0 build Dec 21 2018
 2006 - 2018 Copyright by rt-thread team
msh >

上述示例输出来自文档记录的历史版本,实际编译产物的版本号与构建时间以当前仓库 BSP 的 rtconfig.h(如 stm32f746-st-nucleo/rtconfig.h)中 RT_VER_NUM 为准。msh > 提示符出现后,即可在 RT-Thread 的 msh(Module Shell)命令行中执行 help、list 等内置命令。

源码佐证:默认外设与 LED 闪烁逻辑

以 stm32f746-st-nucleo 为例,其 rtconfig.h 中明确配置:

#define RT_CONSOLE_DEVICE_NAME "uart3"   /* 控制台输出设备为 uart3 */
#define BSP_USING_GPIO                   /* 启用 GPIO 驱动 */
#define BSP_USING_UART3                  /* 启用 UART3 */

这与文档“默认仅启用 GPIO 与 USART3”的描述完全一致。LED 闪烁由 applications/main.c 实现:它使用 rt_pin_mode 将 LED1(PB0,GET_PIN(B, 0))配置为输出模式,然后循环 rt_pin_write 高低电平并各延时 500ms:

#define LED1_PIN    GET_PIN(B, 0)

int main(void)
{
    int count = 1;
    /* set LED1 pin mode to output */
    rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);

    while (count++)
    {
        rt_pin_write(LED1_PIN, PIN_HIGH);
        rt_thread_mdelay(500);
        rt_pin_write(LED1_PIN, PIN_LOW);
        rt_thread_mdelay(500);
    }

    return RT_EOK;
}

可以看到,RT-Thread 的 PIN 设备框架通过 rt_pin_mode / rt_pin_write 屏蔽了不同 MCU 的寄存器差异,这正是 BSP 中 GPIO 驱动(bsp/stm32/libraries/HAL_Drivers 下的 drv_gpio.c)向上层提供的统一接口。

2.4 终端工具:PuTTy

若本机没有终端工具,可下载 PuTTy 使用:

PuTTy 串口终端工具界面

连接时需在 PuTTy 中选择 Serial 连接方式,填写正确的 COM 端口号与波特率(115200),即可看到上文的 RT-Thread 启动信息与 msh > 命令行。

三、高级功能(Advanced Features)

3.1 默认配置说明

本 BSP 默认仅启用 GPIO 和 USART3 两个外设。如果需要 SPI、I2C 等更多高级外设,需要使用 RT-Thread ENV 工具 对 BSP 进行配置。ENV 是 RT-Thread 提供的命令行配置环境,其核心工作流如下:

  1. 在具体的 BSP 文件夹下打开 Env 工具;
  2. 输入 menuconfig 命令进入图形化配置界面,完成配置后 保存并退出;
  3. 输入 pkgs --update 命令更新软件包;
  4. 输入 scons --target=mdk4/mdk5/iar 命令重新生成对应 IDE 的工程文件。

其中 scons --target 的三个取值分别对应 MDK4、MDK5、IAR 三种工程;如果使用 GCC 工具链,则直接在 Env 中执行 scons 即可完成编译。关于 ENV 工具的完整用法,可参考 RT-Thread 官方 ENV 文档;仓库内另有 STM32系列BSP外设驱动使用教程.md 等中文教程可配合学习。

3.2 配置项与源码对应关系(以 stm32f746-st-nucleo 为例)

以 stm32f746-st-nucleo/board/Kconfig 为例,menuconfig 界面下的菜单结构实际对应如下 Kconfig 配置树:

  • Onboard Peripheral Drivers(板载外设)
    • BSP_USING_USB_TO_USART:启用 USB 转 USART(即板载 ST-LINK 虚拟串口,对应 uart3),默认开启,并自动选中 BSP_USING_UART3;
    • BSP_USING_ETH:启用以太网(默认关闭),开启后还需通过 choice 选择板载 PHY 芯片,可选 LAN8720A、DM9161CEP、LAN8742A;
  • On-chip Peripheral Drivers(片内外设)
    • BSP_USING_GPIO:启用 GPIO(默认开启,自动选中 RT_USING_PIN);
    • BSP_USING_UART:UART 总开关(默认开启,自动选中 RT_USING_SERIAL),其下可逐项配置 UART3、UART5:
      • BSP_UART3_RX_USING_DMA / BSP_UART3_TX_USING_DMA:UART3 收发 DMA(依赖 RT_SERIAL_USING_DMA);
      • BSP_UART3_RX_BUFSIZE:UART3 接收缓冲区大小,取值范围 64~65535,默认 256;
      • BSP_UART3_TX_BUFSIZE:UART3 发送缓冲区大小,取值范围 0~65535,默认 0;
      • BSP_UART3_DMA_PING_BUFSIZE:UART3 RX DMA 乒乓缓冲区大小,取值范围 32~65535,默认 64;
      • BSP_STM32_UART_V1_TX_TIMEOUT:UART V1 发送超时,默认 4000;
    • BSP_USING_SPI:SPI 总线总开关(默认关闭,自动选中 RT_USING_SPI),可分别启用 SPI1/SPI2/SPI3 及各自的 TX/RX DMA;
    • BSP_USING_SOFT_I2C:软件 I2C(默认关闭),可配置 swi2c1 的 SCL/SDA 引脚号(默认 22/23);
    • BSP_USING_TIM:定时器(默认关闭),支持 TIM2/TIM3/TIM4/TIM5;
    • BSP_USING_PWM:PWM(默认关闭),支持 TIM3 的 CH2/CH3/CH4 输出;
    • BSP_USING_ADC:ADC(默认关闭),支持 ADC1;
    • BSP_USING_ONCHIP_RTC:片上 RTC(默认关闭),时钟源可选 LSE 或 LSI;
    • BSP_USING_WDT:看门狗(默认关闭);
    • BSP_USING_SDIO:SDIO(默认关闭,自动选中 RT_USING_SDIO 与 RT_USING_DFS);
    • BSP_USING_CAN:CAN(默认关闭),支持 CAN1;
    • BSP_USING_USBD:USB 设备(默认关闭),可配置 USB 连接引脚与上拉状态。

这些 config 选项在 menuconfig 保存后,会被写入 BSP 的 rtconfig.h,并最终由驱动源码(bsp/stm32/libraries/HAL_Drivers)通过 #ifdef BSP_USING_xxx 条件编译决定哪些外设驱动被编译进固件。因此,配置外设的本质就是“选择宏开关 → 重新生成工程 → 重新编译”,无需手工改动驱动代码。

3.3 内存与链接脚本

BSP 的内存布局定义在 board/board.h 中。以 STM32F746ZG 为例:

  • Flash 起始地址 0x08000000,容量 1 MB;
  • SRAM 起始 0x20010000 之后共 256 KB,堆区(Heap)从编译器生成的 __bss_end(或 ARMCC 的 Image$$RW_IRAM1$$ZI$$Limit、IAR 的 CSTACK 段尾)开始,一直延伸到 SRAM 末尾。

链接脚本位于 board/linker_scripts,提供 MDK(.sct)、IAR(.icf)、GCC(.lds)三种格式;时钟初始化由 SystemClock_Config(CubeMX 配置生成,见 board/CubeMX_Config)完成。如果更换同板型不同型号的 MCU,只需同步修改 board.h 中的 Flash/SRAM 边界与 rtconfig.h 中的 SOC_* 宏。

四、进阶学习路径

掌握以上流程后,可继续深入以下方向:

  1. 外设驱动开发:阅读 STM32系列外设驱动添加指南.md 与 STM32系列驱动介绍.md,了解如何为 BSP 新增外设驱动;
  2. BSP 移植:参考 How to make a STM32 BSP for RT-Thread.md,掌握基于模板工程创建新板卡 BSP 的方法;
  3. 工程创建:RT-Thread Studio 用户可阅读 How to create a RT-Studio project.md;
  4. 驱动框架源码:RT-Thread 的 PIN、UART、SPI、I2C 等设备框架实现位于 components/drivers,结合 HAL 层驱动(bsp/stm32/libraries/HAL_Drivers/drivers)可完整理解“设备框架 → 驱动实现 → HAL 库”的三层结构。

五、总结

RT-Thread 为 STM32 Nucleo-144 系列板卡提供了开箱即用的 BSP:MDK4/MDK5/IAR/GCC 多工程支持、ST-LINK 一键烧录、默认 uart3 控制台与 LED 演示,让开发者可以在数分钟内跑起一个完整的 RTOS 系统;当需要更多外设时,通过 ENV 工具的 menuconfig、pkgs --update 与 scons --target=mdk4/mdk5/iar 三步操作即可增量扩展驱动并重新生成工程。这一“默认精简、按需扩展”的设计思路,同样适用于 RT-Thread 仓库中其他 STM32 系列 BSP,是学习 RT-Thread BSP 架构的最佳切入点。

  • 操作系统
  • 嵌入式
  • 物联网
  • 嵌入式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),仅供参考

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值