- 操作系统
- 嵌入式
- 物联网
- 嵌入式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 开源仓库中bsp/stm32/stm32f410-st-nucleo的 BSP 文档为核心,系统讲解 STM32F410-Nucleo-64 开发板的芯片资源、板级外设、BSP 目录结构与驱动支持现状,并给出从硬件连接、编译下载到 ENV 进阶配置的完整实操路径。读者通过本文可以独立将该 BSP 编译运行在开发板上,看到 LED 闪烁与 msh 串口交互,并能自行通过 menuconfig 扩展 ADC、PWM、I2C 等外设驱动。
一、开发板与芯片概览
STM32F410-Nucleo-64 是意法半导体推出的基于 ARM Cortex-M4 内核的 Nucleo-64 系列开发板,对应 BSP 位于仓库 bsp/stm32/stm32f410-st-nucleo,其官方说明文档即 bsp/stm32/stm32f410-st-nucleo/README.md(英文)与 bsp/stm32/stm32f410-st-nucleo/README_zh.md(中文)。
1.1 板载资源
该开发板常用板载资源如下(摘自 README_zh.md):
- MCU:STM32F410RBT6,主频 100MHz,128KB FLASH,32KB RAM;
- LED:3 个,分别为 USB communication(LD1)、user LED(LD2)、power LED(LD3);
- 按键:2 个,USER 与 RESET;
- 调试接口:板载 ST-LINK/V2-1 调试器,无需外接仿真器即可下载与调试。
1.2 芯片核心特性
板载芯片为 STM32F410x8/B 系列,基于高性能 ARM Cortex-M4 32 位 RISC 内核,工作频率最高 100MHz。Cortex-M4 内核集成了单精度浮点单元(FPU),支持全部 ARM 单精度数据处理指令与数据类型,同时实现了一整套 DSP 指令和内存保护单元(MPU),可增强应用安全性(见 README.md)。
STM32F410x8/B 属于 STM32 Dynamic Efficiency™ 产品线,新增了Batch Acquisition Mode(BAM,批量采集模式)创新特性,在数据批量采集期间可进一步节省功耗。芯片内部集成高速嵌入式存储器(最高 128KB Flash、32KB SRAM),以及丰富的增强型 I/O 和外设,挂接在两条 APB 总线、一条 AHB 总线与 32 位多 AHB 总线矩阵上。
原文档列出的关键特性可归纳如下:
| 类别 | 关键规格 |
|---|---|
| 内核 | Cortex-M4 + FPU + MPU,最高 100MHz,125 DMIPS / 1.25 DMIPS/MHz(Dhrystone 2.1),支持 DSP 指令,ART Accelerator™ 实现 Flash 零等待执行 |
| 存储器 | 最高 128KB Flash、512 字节 OTP、32KB SRAM |
| 时钟/复位/供电 | 1.7V~3.6V 供电;POR、PDR、PVD、BOR;4~26MHz 晶振;内部 16MHz 出厂校准 RC;带校准的 32kHz RTC 振荡器与内部 32kHz RC |
| 功耗 | Run 模式 89μA/MHz(外设关闭);Stop 模式(Flash 处于 Stop)40μA 典型(25℃);Stop 模式(Flash 深度掉电)最低 6μA(25℃);Standby 2.4μA(25℃、1.7V、无 RTC);RTC 的 VBAT 供电 1μA(25℃) |
| 模拟外设 | 1×12 位 2.4MSPS ADC(最多 16 通道);1×12 位 DAC |
| DMA | 16 流 DMA 控制器,带 FIFO 与突发传输支持 |
| 定时器 | 最多 9 个:1 个 16 位高级电机控制定时器、1 个低功耗定时器(Stop 模式下可用)、3 个 16 位通用定时器、1 个最高 100MHz 的 32 位定时器(支持 4 路 IC/OC/PWM、脉冲计数与正交编码器输入)、2 个看门狗(独立窗口)、SysTick |
| 调试 | SWD 与 JTAG 接口;Cortex-M4 ETM 跟踪宏单元 |
| I/O | 最多 50 个可中断 I/O 口(含最多 45 个 100MHz 高速 I/O、最多 49 个 5V 容忍 I/O) |
| 通信接口 | 最多 9 个:3×I2C(SMBus/PMBus,含 1 路 1MHz 快速模式)、3×USART(2×12.5Mbit/s、1×6.25Mbit/s,支持 ISO 7816、LIN、IrDA、调制解调控制)、3×SPI/I2S(最高 50Mbit/s SPI 或 I2S 音频协议) |
| 其他 | 真随机数发生器(TRNG)、CRC 计算单元、96 位唯一 ID、带亚秒精度的硬件日历 RTC;所有封装均为 ECOPACK®2 |
二、BSP 目录结构与外设支持现状
2.1 BSP 目录结构
bsp/stm32/stm32f410-st-nucleo/ ├── applications/ # 应用入口 main.c(LED 闪烁示例) ├── board/ │ ├── CubeMX_Config/ # STM32CubeMX 工程与 HAL 配置(.ioc) │ ├── linker_scripts/ # 链接脚本:link.icf / link.lds / link.sct │ ├── Kconfig # 板级驱动配置菜单 │ ├── SConscript │ ├── board.c # 系统时钟 SystemClock_Config │ └── board.h # Flash/SRAM 地址、堆区定义 ├── figures/ # 文档配图 ├── Kconfig # BSP 总配置入口 ├── project.uvprojx # MDK5 工程(直接打开使用) ├── project.ewp/.eww # IAR 工程 ├── rtconfig.h # 当前生效的配置宏 └── rtconfig.py # 工具链与编译选项配置2.2 外设支持现状
本 BSP 默认对外设的支持情况如下(摘自 README_zh.md):
| 片上外设 | 支持情况 | 备注 |
|---|---|---|
| GPIO | 支持 | PA0, PA1 ... 对应 PIN: 0, 1 ... 63 |
| UART | 支持 | UART2 |
从 board/Kconfig 可以看到,默认使能的板载驱动为BSP_USING_STLINK_TO_USART(即板载 ST-LINK 虚拟串口复用 USART2),片上驱动默认开启 GPIO(BSP_USING_GPIO)与 UART(BSP_USING_UART、BSP_USING_UART2);ADC、PWM、软件 I2C 等默认关闭,需要按需通过 menuconfig 打开。对应地,rtconfig.h 中已生成#define BSP_USING_STLINK_TO_USART、#define BSP_USING_GPIO、#define BSP_USING_UART2等宏,并将控制台设备指定为#define RT_CONSOLE_DEVICE_NAME "uart2",这解释了为何默认串口输出出现在串口 2 上。
三、快速上手:把 RT-Thread 跑起来
本 BSP 同时提供 MDK5 与 IAR 工程,并支持 GCC 开发环境。以下以 MDK5 为例介绍完整流程(同见 README_zh.md 与英文 STM32_Nucleo-64_BSP_Introduction.md)。
3.1 拉取依赖库(必做)
注意:执行编译前,请先在 ENV 工具中打开本 BSP 目录并执行以下指令。该指令用于拉取必要的 HAL 库与 CMSIS 库,否则工程无法通过编译:
pkgs --update从 rtconfig.h 可以看到依赖的软件包:PKG_USING_STM32F4_HAL_DRIVER(STM32F4 HAL 驱动)、PKG_USING_STM32F4_CMSIS_DRIVER、PKG_USING_CMSIS_CORE,这些正是pkgs --update需要联网拉取的组件。
3.2 硬件连接
使用 Type-A 转 Mini-B 数据线连接开发板与 PC 供电。上电后红色 LED LD3(PWR)与 LD1(COM)点亮,表示供电与 ST-LINK 通信正常。
3.3 编译下载
- 双击 project.uvprojx 打开 MDK5 工程(注意不是
template.uvprojx); - 工程默认配置使用 ST-LINK 下载程序,点击下载按钮即可将程序烧录到开发板。
若使用其他调试器配置,可参考英文文档步骤:在 “Options for Target” 的 Debug 页选择 "ST-LINK Debugger",Setting 中 Port 选择 "SW (Serial Wire)",并在 Flash Download 中勾选 "Reset and Run"。
3.4 运行结果
程序下载成功后系统自动运行。观察开发板 LED:红色 LD3 与 LD1 常亮,绿色 LD2 周期性闪烁。
LED 闪烁逻辑对应 applications/main.c:其中LED0_PIN定义为GET_PIN(A, 5),即 LD2 接在 PA5;main线程先将该引脚设为输出模式,随后循环执行rt_pin_write(LED0_PIN, PIN_HIGH)与rt_pin_write(LED0_PIN, PIN_LOW)各延时 500ms,形成周期 1 秒的闪烁效果。这也是学习 RT-Thread PIN 设备驱动(rt_pin_mode/rt_pin_write)最简单的入门示例。
USB 虚拟 COM 端口默认连接串口 2。在终端工具中打开相应串口(参数115200-8-1-N),复位设备后可看到 RT-Thread 的启动输出:
\ | / - RT - Thread Operating System / | \ 4.0.3 build Mar 7 2020 2006 - 2020 Copyright by rt-thread team msh >出现msh >提示符即代表系统已正常运行,可在 msh 命令行中输入 RT-Thread 内置命令(如help、list_thread、list_device)进行验证。需要说明的是,上述输出中的版本号取决于实际构建时 rtconfig.h 的RT_VER_NUM(当前仓库该值为0x50300,即 5.3.0),开发者以自己编译产物的实际打印为准。
四、进阶使用:通过 ENV 配置更多外设
该 BSP 默认只开启了 GPIO 与串口 2 的功能,SPI、I2C、ADC、PWM 等更多外设需要通过 RT-Thread ENV 工具配置启用,步骤如下(摘自 README_zh.md):
- 在 BSP 目录下打开 ENV 工具;
- 输入
menuconfig配置工程,配置完成后保存退出; - 输入
pkgs --update更新软件包; - 输入
scons --target=mdk4/mdk5/iar重新生成对应 IDE 工程。
重新生成的工程即包含新配置的外设驱动。以下结合 board/Kconfig 介绍本 BSP 可配置的驱动选项:
4.1 板载外设驱动(Onboard Peripheral Drivers)
BSP_USING_STLINK_TO_USART:使能板载 ST-LINK 虚拟串口(USART2),默认开启;BSP_USING_ARDUINO:兼容 Arduino 生态(RTduino),默认关闭。开启后会联动打开 GPIO、ADC、PWM(PWM1 的 CH1/CH2/CH3)、软件 I2C 等驱动,并依赖PKG_USING_RTDUINO软件包。
4.2 片上外设驱动(On-chip Peripheral Drivers)
- GPIO(
BSP_USING_GPIO):默认开启,依赖 RT-Thread PIN 设备框架(RT_USING_PIN); - UART(
BSP_USING_UART):默认开启,包含 UART1 与 UART2 两个子选项。每个串口可选 RX/TX DMA(需先使能RT_SERIAL_USING_DMA),并可配置接收/发送缓冲区大小(RX 缓冲区范围 64~65535,默认 256;DMA 乒乓缓冲区默认 64)。串口 V1 版本下还可配置BSP_STM32_UART_V1_TX_TIMEOUT(默认 2000ms); - ADC(
BSP_USING_ADC):默认关闭,使能后可选 ADC1; - PWM(
BSP_USING_PWM):默认关闭,使能后可选定时器 1 输出 PWM,并逐通道使能 CH1/CH2/CH3; - 软件 I2C(
BSP_USING_SOFT_I2C):默认关闭,使能后可配置RT_SOFT_I2C1_SCL_PIN(默认 24)与RT_SOFT_I2C1_SDA_PIN(默认 25)两个引脚号。
更详细的外设驱动使用教程可参考 STM32 系列 BSP 外设驱动使用教程(原文档中该链接位于../docs/下,此处已转换为仓库根目录起始的全局相对路径)。
五、源码级延伸:时钟、内存与工具链
5.1 系统时钟配置
board/board.c 中的SystemClock_Config()展示了本 BSP 的时钟树:以内部 16MHz HSI 为 PLL 时钟源,PLLM=16、PLLN=336、PLLP=DIV4,即 16MHz/16×336/4 = 84MHz 的 SYSCLK;AHB 分频 1、APB1 分频 2(42MHz)、APB2 分频 1(84MHz),Flash 等待周期设为 2。代码同时通过__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1)配置主内部稳压器输出电压档位为 Scale 1,以支撑高频运行。开发者若改用外部晶振或调整主频,修改此函数即可。
5.2 Flash / SRAM 与堆区布局
board/board.h 中定义了:
- Flash 起始地址
0x08000000,大小 128KB; - SRAM 大小为 32KB,结束地址
0x20000000 + 32*1024; - 堆区
HEAP_BEGIN根据工具链不同分别取自 MDK 的Image$$RW_IRAM1$$ZI$$Limit、IAR 的__segment_end("CSTACK")或 GCC 的__bss_end,HEAP_END为 SRAM 结束地址,RT-Thread 的内存堆即在此区间内动态分配。
各工具链对应的链接脚本位于 board/linker_scripts:GCC 使用link.lds、MDK 使用link.sct、IAR 使用link.icf。
5.3 工具链与构建
rtconfig.py 通过RTT_CC环境变量选择 GCC / Keil / IAR 三种工具链:
- GCC:
arm-none-eabi-前缀,CPU 为cortex-m4,启用 FPU 硬浮点(-mfpu=fpv4-sp-d16 -mfloat-abi=hard),链接脚本指向board/linker_scripts/link.lds,构建产物为rtthread.bin+rtthread.map; - Keil(armcc):使用
--cpu Cortex-M4.fp,散射文件为link.sct,并启用微库 microlib; - IAR(iccarm):CPU
Cortex-M4、FPUVFPv4_sp,配置link.icf,产物经ielftool生成rtthread.bin。
开发者可通过设置环境变量RTT_EXEC_PATH覆盖编译器路径,再执行scons完成命令行构建。
六、参考资料与维护信息
6.1 延伸阅读
| 文档 | 说明 |
|---|---|
| STM32_Nucleo-64_BSP_Introduction.md | STM32 Nucleo-64 全系列 BSP 介绍,含快速上手与进阶特性(必读) |
| STM32 系列 BSP 外设驱动使用教程 | STM32 系列 BSP 外设驱动的详细使用方法 |
| How to make a STM32 BSP for RT-Thread.md | 制作一个全新 STM32 BSP 的流程指南 |
6.2 维护信息
该 BSP 由 tanglj86 维护,邮箱 tanglj86@gmail.com;中文文档由 RT-Thread 社区的 Meco Man 翻译(jiantingman@foxmail.com)。
七、小结
STM32F410-Nucleo-64 的 RT-Thread BSP 是一个结构完整、开箱即用的板级支持包:英文与中文 README 完整覆盖了芯片特性、板载资源与使用流程;board/Kconfig提供了 GPIO、UART、ADC、PWM、软件 I2C、RTduino 等可裁剪的驱动菜单;board.c/board.h/linker_scripts给出了可直接借鉴的时钟、内存与链接配置。开发者只需按“pkgs --update→ 编译下载 → 串口观察”三步即可让 RT-Thread 运行起来,再通过 ENV 的menuconfig与scons --target=mdk5逐步打开更多外设,非常适合作为学习 RT-Thread 设备驱动框架与 STM32 BSP 移植的入门与参考工程。
- 操作系统
- 嵌入式
- 物联网
- 嵌入式OS
- RTOS
【免费下载链接】rt-thread
RT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/
相关推荐
Wasp 页面与路由(Pages & Routes)入门:用 route 与 page 声明构建 React 应用导航
Wasp 页面与路由(Pages & Routes)入门:用 route 与 page 声明构建 React 应用导航 在 Wasp 中,页面与路由的声明式配置
操作系统嵌入式物联网嵌入式OSRTOSRT-Thread STM32 Nucleo-64 BSP 开发指南:板卡资源、快速上手与高级外设配置
RT Thread STM32 Nucleo 64 BSP 开发指南:板卡资源、快速上手与高级外设配置 本文围绕 RT Thread 官方为 STM32 Nuc
操作系统嵌入式物联网嵌入式OSRTOSSurfSense Walmart 产品专家子代理:基于公开商品数据与深度评论挖掘的 Agent 实战指南
SurfSense Walmart 产品专家子代理:基于公开商品数据与深度评论挖掘的 Agent 实战指南 导读 本指南围绕 SurfSense 多智能体聊天系
操作系统嵌入式物联网嵌入式OSRTOS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考