• 正文
  • 相关推荐
申请入驻 产业图谱

如何将STM32CubeMX 应用移植到 SBSFU

14小时前
40
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

摘要

本文是意法半导体(ST)把 STM32CubeMX 生成工程移植进 SBSFU 的分步指南:工程配置、存储器映射、硬件适配与调试技巧。

以 NUCLEO-L476RG 的 applications 目录里 SBSFU 2_Images 示例为准;其他 SBSFU 示例与 STM32 目标也可参照。

本文不是 SBSFU 入门。需要先熟悉 SBSFU。更多信息见原文 Related links。

引言

X-CUBE-SBSFU 是安全框架,提供:

  • 安全引导加载模块
  • 安全固件更新模块
  • Secure engine 模块(管理安全服务)
  • 密钥管理服务模块(L4、WL)

移植前先建好用户应用。本文用一个简单的 STM32CubeMX 工程:每 1 秒翻转板载绿色 LED(PA5),并经连 STLINK 的 USART2 打印 "Hello World"。

重要: 用 STM32CubeMX 生成工程时,须在工程配置中启用 “Generate under root”。该设置会影响生成工程结构及工程与构建脚本使用的相对路径。

撰写本文时的系统配置:

  • Python:v3.12.3
  • STM32CubeIDE v2.2.0
  • X-CUBE-SBSFU v2.8.0
  • STM32CubeMX v6.18.1
  • STM32CubeCTL v1.1.18

硬件使用 NUCLEO-L476。

1. 用户应用配置

使用 2_Images 示例与 NUCLEO-L476 板:

x-cube-sbsfu-v2-8-0/STM32CubeExpansion_SBSFU_V2.8.0/Projects/NUCLEO-L476RG/Applications/2_Images

  • 将用户应用 SBSFU_user_application 复制到 2_Images 文件夹
  • 导入到 STM32CubeIDE:File → STM32 Project Create/Import → STM32CubeMX/STM32CubeIDE Project → Next
  • 工程路径:上述 2_Images 路径

2. SBSFU 总体流程

构建或烧录须按特定顺序。

右键图中高亮的 STM32CubeIDE 图标,选择 Build project:

  1. 先构建 2_Images_SECoreBin
  2. 再构建 2_Images_SBSFU
  3. 用 STM32CubeIDE 烧录 SBSFU.elf
  4. 构建用户应用,在 2_Images_UserApp/Binary 下生成 UserApp.sfb
  5. 用 Tera Term 将用户应用上传到器件

为便于开发,可先禁用全部安全特性,基本功能验证后再启用。打开 2_Images_SBSFU/APP/app_sfu.h,取消注释:

#define SECBOOT_DISABLE_SECURITY

安装 Python 包,进入:

.../Middlewares/ST/STM32_Secure_Engine/Utilities/KeysAndImages

在 PowerShell 中运行:

pip3 install -r requirements.txt.

3. 用户应用编译器配置

  • 为 SBSFU_user_application 配置 include paths(properties → C/C++ build → settings → MCU GCC compiler → include paths):
    • ../../../2_Images_SBSFU/SBSFU/App
    • ../../../Linker_Common/STM32CubeIDE
    • ../../../2_Images_SECoreBin/Inc
    • ../../../../../../../Middlewares/ST/STM32_Secure_Engine/Core
  • MCU GCC compiler → Miscellaneous → Other flags 增加:-Wno-format -Wno-strict-aliasing
  • MCU GCC Linker → library → Library search path 增加:../../../2_Images_SBSFU/STM32CubeIDE/Debug(以便检测到 postbuild.sh 生成的 se_interface_app.ld)
  • Build steps → Post-Build:
arm-none-eabi-objcopy -O binary "${BuildArtifactFileBaseName}.elf" "../${BuildArtifactFileBaseName}.bin" && arm-none-eabi-size "${BuildArtifactFileName}" && "../../2_Images_SECoreBin/STM32CubeIDE/postbuild.sh" "./" "${BuildArtifactFileBaseName}.elf" "../${BuildArtifactFileBaseName}.bin" "1" "1"

点击 Apply and close。

4. Flash 存储器适配

用户应用要链接并跑在 SBSFU 应用槽,不能留在默认地址 0x08000000。以 2_Images/UserApp 为参考,把它的链接脚本 STM32L476RGTx.ld 内容拷进 CubeMX 生成应用的链接脚本,再改存储器区域、向量表位置、段与 RAM/栈。

5. 用户应用软件配置

用 STM32CubeMX 生成时建议打开 IWDG——SBSFU bootloader 会配它。主循环里要定期喂狗,或者按自己的方案关掉。

  1. 在 main() 最顶部、HAL_Init() 之前复位 RCC/时钟状态(HAL_RCC_DeInit() 或 RCC 复位序列)
  2. 将 SCB->VTOR 设为应用实际向量表地址(链接脚本符号,如 INTVECT_START / g_pfnVectors)
  3. 反初始化 SBSFU 已用外设,尤其 UART:在 MX_USART2_UART_Init() 前调用 HAL_UART_DeInit()
  4. 喂狗:HAL_IWDG_Refresh() 或 WRITE_REG(IWDG->KR, IWDG_KEY_RELOAD);若看门狗已在运行,勿再按 CubeMX 生成路径重新初始化

原文示例结构示意:

extern void *g_pfnVectors;
#define INTVECT_START ((uint32_t)&g_pfnVectors)
int main(void)
{
  SCB->VTOR = INTVECT_START;
  HAL_Init();
  HAL_RCC_DeInit();
  HAL_UART_DeInit(&huart2);
  // User code here
  while(1){
    WRITE_REG(IWDG->KR, IWDG_KEY_RELOAD);
  }
}

6. 测试用户应用

  • 构建 SBSFU_user_application → 在 Binary 下生成 .sfb
  • 用 SBSFU 工程烧录 Nucleo-L476
  • 用 Tera Term 经 Ymodem 做固件更新
  • 启动时按蓝色按键可进入固件更新模式
  • 详见 SBSFU getting started 用户手册 8.4.2

7. 调试应用

打开 2_Images_SBSFU 的 debug configuration → Startup:添加工程并启用 Load symbols;为 SBSFU_user_application 与 SECoreBin 加载符号,无需下载用户镜像或 SECoreBin。

开发模式(app_sfu.h):

  1. 停用全部安全保护:启用 SECBOOT_DISABLE_SECURITY_IPS
  2. 确保 SFU_FINAL_SECURE_LOCK_ENABLE 禁用
  3. 启用 SFU_FWIMG_BLOCK_ON_ABNORMAL_ERRORS_MODE
  4. 启用 SFU_VERBOSE_DEBUG_MODE 与 SFU_DEBUG_MODE

随后可调试 SBSFU 工程。

8. 限制

8.1 路径中的空格

工程、工具链或工作区路径不要含空格;SBSFU 构建脚本不支持。

8.2 更新 Python 脚本

按系统 Python 命令别名,必要时将 2_Images_SECoreBin/STM32CubeIDE 与 2_Images_SBSFU/STM32CubeIDE 下 .sh 中的 python 改为 py 等。

8.3 编译过程

用 Arm GCC 14(如 14.3.1)构建 SECoreBin 时可能出现 Secure Engine 链接错误。变通:使用早于 GCC 14 的 Arm GNU 工具链;本文用 STM32CubeCLT 1.1.18(提供兼容的 Arm GCC 13),并在 Window → Preferences → STM32Cube → Toolchain Manager 指向该 arm-gcc。

9. 使用附件工程

  1. 解压工程
  2. 复制到 .../Projects/NUCLEO-L476RG/Applications/
  3. 用 STM32CubeIDE 导入

注意:解压可能多一层目录;只复制包含 SBSFU 工程与 SBSFU_user_application 的根文件夹。

结论

到这里,STM32CubeMX 生成的应用已经能进 SBSFU 工程;文中也给了调试 SBSFU 时的注意点。

来源:https://community.st.com/stm32-mcus-60/how-to-port-a-stm32cubemx-application-to-sbsfu-168363 参数以意法半导体官方最新资料为准。

意法半导体

意法半导体

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏览意法半导体公司网站:www.st.com.cn

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏览意法半导体公司网站:www.st.com.cn收起

查看更多

相关推荐

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一 家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和 解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需 求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广 泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排 放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏 览意法半导体公司网站:www.st.com.cn