news 2026/9/28 2:21:46

RT-Thread STM32N657-ST-NUCLEO BSP 实战指南:FSBL 启动流程、固件签名烧录与 ENV 外设配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RT-Thread STM32N657-ST-NUCLEO BSP 实战指南:FSBL 启动流程、固件签名烧录与 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 仓库中 STM32N657-ST-NUCLEO BSP 为对象,系统讲解 STM32N657 这颗带 NPU 的 Cortex-M55 芯片特有的多级启动机制(FSBL / FSBL+Load&Run / FSBL+XiP)、签名与烧录工具链的环境配置,以及如何把 RT-Thread 5.3.1 在开发板上跑起来并借助 ENV 工具扩展 GPIO、UART、SPI、PWM、TIM 等外设驱动。读完本文,你将能独立完成从拉取 HAL 依赖包、编译 FSBL 与 APP 双工程、签名烧录到进阶外设裁剪的完整闭环。

开发板资源与 BSP 外设支持概览

STM32N657 是 ST 推出的基于 ARM Cortex-M55 内核的评估芯片,最高主频 800 MHz,配合丰富的板载资源可以充分发挥芯片性能。该 BSP 由社区开发者 tyustli 提供,位于仓库 bsp/stm32/stm32n657-st-nucleo,主要板载资源如下:

资源类别规格说明
MCUSTM32N657,主频 800 MHz,内置 32 KB ICACHE、32 KB DCACHE
RAM4.2 MB 连续 SRAM(分为多个存储组)、8 KB 备用 SRAM(VBAT 模式下工作)
AI 加速器1 GHz 的 ST Neural-ART 加速器,可提供 600 Gops
GPUNeo-Chrom GPU
常用接口USB 转串口、以太网接口、Arduino 接口等
调试器板载 ST-LINK(ST-LINK/V2-1、STLINK-V3E 或 STLINK-V3EC),支持 USB 重新枚举功能:大容量存储器、虚拟 COM 端口和调试端口

当前 BSP 对外设的支持情况如下表:

板载外设支持情况备注
USB 转串口支持
片上外设支持情况备注
GPIO支持
UART支持UART1
SPI支持
PWM支持
TIM支持

从 board/Kconfig 的默认配置可以看到,BSP 默认只开启 ICACHE/DCACHE、GPIO 与 UART1,SPI、PWM、TIM 均为可选外设,这正是本文“进阶使用”章节要解决的问题。

STM32N657 三级启动流程详解

STM32N6 是 ST 第一颗带 NPU 的 MCU 芯片,片内只有一小块 ROM 用于第一阶段的 Boot,用户代码必须存放在外部 Flash,或者通过 USB/U(S)ART 串口启动。因此其启动过程比传统 Cortex-M 芯片多出一个"引导加载"环节,共存在三种启动方式(本 BSP 采用第三种 FSBL+XiP):

FSBL(First Stage Boot Loader)

FSBL 全称为 First Stage Boot Loader。上电后先执行片内 ROM 区域的 BootROM,再根据 Boot 选项和地址,执行相应地址的 FSBL。以外部 Flash 启动为例,流程如下图所示:

具体步骤:

  1. BootROM 启动后,先验证 FSBL 的头(上图中深黄色部分,即 1024 Bytes 的 Header 信息)。FSBL 程序必须使用 ST 提供的脚本完成签名,否则无法正常启动。验证成功后,BootROM 将 FSBL 程序搬运至内部 SRAM2 的0x34180000位置,然后 PC 指针跳转过去开始执行 FSBL。
  2. FSBL 开始执行。

FSBL + Load&Run

APP 的开发可以在内部 SRAM 中调试完成,开发完成后通过 External Loader 下载到外部 Flash。流程如下:

  1. 与 FSBL 的执行一样:BootROM 先启动,然后校验、搬运 FSBL,并跳转到 FSBL。
  2. FSBL 开始执行,将 Appli 的完整内容(data 和 code)拷贝到内部 SRAM,然后跳转到 APP 代码执行。
  3. APP 代码开始执行。

该模式下 APP 整体从 SRAM 运行,适合调试阶段使用,setup_app.ini 中LOAD .\fsbl\stm32n657xx_fsbl.axf INCREMENTAL、LOAD .\Objects\rtthread.axf CLEAR INCREMENTAL NOCODE的加载脚本即体现了 FSBL 与 APP 分阶段加载调试的思路。

FSBL + XiP(Execute in Place,本 BSP 使用)

流程如下:

  1. BootROM 开始执行,与第一种方式一样,校验完 FSBL 后将其搬运到 SRAM 中。
  2. FSBL 开始执行,将外部 Flash 配置为 XiP 模式;FSBL 完成后,将 PC 跳转至外部 Flash 中 APP 的第一条指令。
  3. APP 开始执行。

从源码看这套布局的落地细节:FSBL 与 APP 分别使用独立的链接脚本 link_fsbl.ld 和 link_app.ld。FSBL 的 ROM 起点为0x34180400(即 SRAM2 基址0x34180000加上 1024 字节 Header 偏移),长度 255 K;而 APP 的 ROM 起点为0x70100400(外部 Flash 地址0x70100000同样预留 1024 字节 Header),长度 511 K,运行 RAM 则位于0x34000000(2 MB SRAM)。这正对应 board.h 中STM32_SRAM_SIZE (2048)、STM32_SRAM_END (0x34000000 + ...)的定义,也解释了为什么两个工程必须分开编译、分开签名、分开烧录。

配置签名 / 烧录工具的环境变量

由于 STM32N6 的启动强制要求固件签名,烧录也必须借助外部 Flash 的 External Loader,因此正式下载前需要先准备好三类工具。以下以 Windows 为例,需要配置的环境变量有三点:

  1. 签名工具(STM32_SigningTool_CLI.exe)
  2. 烧录工具(STM32_Programmer_CLI)
  3. 烧录算法(External Loader)

上述三个工具均可从 STM32CubeIDE 2.1.1 安装目录获取:签名与烧录工具位于其工具目录下(对应原文档示意图中的 2、3 号工具),将签名与烧录工具所在路径加入系统 PATH;烧录算法则位于 External Loader 目录,需要以环境变量形式配置。

从仓库脚本可以确认真实的依赖项:本 BSP 提供的两个烧录脚本 Signing_Programmer.bat(APP 用)与 fsbl/Signing_Programmer.bat(FSBL 用)在执行时都会做三项硬性检查:

  • where STM32_SigningTool_CLI.exe:签名工具必须位于 PATH;
  • where STM32_Programmer_CLI:烧录工具必须位于 PATH;
  • if not defined N6570_ExternalLoader:环境变量N6570_ExternalLoader必须指向外部加载器路径。

任一缺失脚本都会立即报错退出。建议在 Windows 系统属性中新建用户环境变量N6570_ExternalLoader,值为 STM32CubeIDE 安装目录下 ExternalLoader 文件夹的完整路径,并将包含STM32_SigningTool_CLI.exe与STM32_Programmer_CLI的工具目录加入Path。

快速上手:把 RT-Thread 跑起来

本 BSP 同时提供 MDK5、IAR 工程并支持 GCC 开发环境。开始编译前有一个必须执行的步骤:先在 ENV 工具中执行以下两条命令,用于拉取必要的 HAL 库、CMSIS 库及 FSBL 源码包,否则无法通过编译:

pkgs --upgrade pkgs --update

这一要求与 SConstruct 中内置的bsp_pkg_check()钩子对应:构建前会检查packages/CMSIS-Core-latest、packages/stm32n6_cmsis_driver-latest、packages/stm32n6_hal_driver-latest、packages/stm32n657xx_fsbl-latest四个目录是否存在,缺失即提示先执行pkgs --update(未拉取到任何包时先pkgs --upgrade),否则编译直接退出。

硬件连接

使用 C to C 数据线连接开发板到 PC,确保设备管理器中能识别到板载 ST-Link。

编译下载:MDK 环境

  1. 使用如下命令生成 MDK 工程:
scons --target-mdk5
  1. 双击Project.uvmpw文件,打开包含两个 MDK5 工程(FSBL 和 APP)的工作空间。
  2. 切换活动工程:在工作空间名称上右键 → 点击Manage Multi-Project Workspace...→ 选择要切换的工程 → 点击Set as Active Project→ 点击OK完成切换。此时应切换到stm32n657xx_fsbl工程。
  3. 分别编译并烧录 FSBL 与 APP 两个工程。

工程默认配置使用 ST-LINK 仿真器下载程序,在通过 ST-LINK 连接开发板的基础上,点击下载按钮即可下载程序到开发板。

编译下载:Scons 环境

依次编译两个固件:

scons fsbl -j16 scons -j16

下载程序可以使用本 BSP 自带的图形化烧录工具tools/STM32N6固件烧录工具.exe。打开烧录工具后:

  • FSBL 烧录脚本选择fsbl\Signing_Programmer.bat;
  • APP 烧录脚本选择.\Signing_Programmer.bat;

点击“一键烧录完整固件”按钮即可完成下载。

从脚本看一键烧录做了什么:两个批处理脚本都会经历“清理旧签名文件 → 签名 → 烧录”三步。签名命令形如:

STM32_SigningTool_CLI.exe -bin <固件.bin> -nk -of 0x80000000 -t fsbl -o <固件-trusted.bin> -hv 2.3 -dump <固件-trusted.bin> --align

其中-of 0x80000000指定固件的加载基址,-t fsbl指明镜像类型,-hv 2.3指定 Header 版本;烧录命令形如:

STM32_Programmer_CLI -c port=SWD mode=HOTPLUG ap=1 -el "%N6570_ExternalLoader%" -hardRst -w <签名固件> <Flash 地址>

FSBL 脚本的烧录地址为0x70000000,APP 脚本的烧录地址为0x70100000(与 APP 链接脚本0x70100400的 0x400 Header 偏移对应)。烧录前脚本还会提示确认Boot0 = 0,Boot1 = 1,设备处于 Develop 模式;烧录成功后提示切换到Boot0 = 0,Boot1 = 0(Flash 启动)。

运行结果

下载程序成功之后系统会自动运行,板载 LED 闪烁(LED3 对应引脚 PG0,见 main.c 中rt_pin_write500 ms 间隔翻转的实现)。连接开发板对应串口到 PC,在终端工具中打开该串口(115200-8-1-N),复位设备后可以看到 RT-Thread 的输出信息:

\ | / - RT - Thread Operating System / | \ 5.3.1 build Sep 11 2026 09:31:55 2006 - 2026 Copyright by RT-Thread team msh >

出现msh >命令行提示符即表示系统运行正常。

进阶使用:用 ENV 开启更多外设

此 BSP 默认只开启 GPIO 和串口 1,如需使用更多高级功能,需要利用 ENV 工具对 BSP 进行配置,步骤如下:

  1. 在 bsp 目录下打开 ENV 工具。
  2. 输入menuconfig命令配置工程,配置好之后保存退出。
  3. 输入pkgs --update命令更新软件包。
  4. 输入scons --target=mdk4/mdk5/iar命令重新生成工程。

从 board/Kconfig 看可配置项,片上外设菜单中主要包含:

配置项含义默认值
BSP_SCB_ENABLE_I_CACHE/BSP_SCB_ENABLE_D_CACHE使能 ICACHE / DCACHEy
BSP_USING_GPIO使能 GPIO(同时选中RT_USING_PIN)y
BSP_USING_UART+BSP_USING_UART1使能 UART1,可设置 RX 缓冲(默认 256,范围 64~65535)、TX 缓冲(范围 0~65535)y
BSP_USING_SPI+BSP_USING_SPI5使能 SPI5 总线,可选 SPI5 TX/RX DMAn
BSP_USING_PWM+BSP_USING_PWM1使能 TIM1 输出 PWM,可选 CH1~CH4 通道n
BSP_USING_TIM+BSP_USING_TIM2使能 TIM2 定时器(依赖RT_USING_CLOCK_TIME)n

开启对应选项后重新生成工程并编译烧录,即可在 RT-Thread 中通过标准设备接口(如rt_pin_*、rt_device_*、rt_pwm_*)使用这些外设。更详细的驱动使用方法请参考 STM32 系列 BSP 外设驱动使用教程:STM32系列BSP外设驱动使用教程.md。

注意事项

  • 调试串口为串口 1,引脚映射如下:
    • PE5 ------> VCP_TX
    • PE6 ------> VCP_RX
  • 编译时如果找不到 FSBL 工程,请检查packages目录下是否存在stm32n657xx_fsbl-latest软件包(可通过pkgs --update拉取)。
  • 首次构建务必先执行pkgs --upgrade与pkgs --update,否则 SConstruct 的依赖检查会中断构建。
  • 固件必须签名后才能启动,烧录时注意区分 FSBL(0x70000000)与 APP(0x70100000)的烧录地址,并在烧录前将芯片置于 Develop 模式(Boot0=0,Boot1=1)、烧录后切换回 Flash 启动(Boot0=0,Boot1=0)。
  • 操作系统
  • 嵌入式
  • 物联网
  • 嵌入式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
点击查看免费下载

相关推荐

上一篇:InternVL:开源多模态对话模型
下一篇:【亲测免费】 InternVL 项目安装和配置指南

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 2:19:30

S7-1500模拟量处理全解析:NORM_X与SCALE_X指令详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/28 2:18:35

【Excel经验】字符串处理方法

文章目录 前言 一、概览-公式汇总 1 把多列内容拼接在一起,作为新的一列的内容 2 某列的内容是数值,但是格式是字符串形式,需要转换为数值类型,方便计算 3 截取指定位置的子串 3.1 左截取LEFT、LEFTB 3.2 右截取RIGHT、RIGHTB 3.3 中间截取 MID MIDB 4 分割字符串用得到后的…

作者头像 李华