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

STM32MP13x 裸跑实战指南:从环境搭建到外部 Flash 启动全流程

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

STM32MP13x 系列 MPU(单核 Cortex-A7,主频 650MHz~1GHz)不仅支持 Linux 系统,还可基于 ST 官方 HAL 库实现无 OS 裸跑,适配 RTOS 或纯裸机项目需求。本文从开发环境搭建、工程创建、在线调试到镜像烧录启动,完整拆解 STM32MP13x 裸跑应用的核心步骤,覆盖 CubeMX 生成工程、开发包导入、SYSRAM/DDR 调试、外部 Flash 启动四大核心场景,助力快速落地裸机项目。

资料获取:在STM32MP13x系列MPU上裸跑应用程序

1. 开发环境与核心资源准备

裸跑开发需先配齐工具链与开发包,确保软硬件环境兼容,核心资源如下:

1.1 必备开发工具

  • 配置工具:STM32CubeMX(≥v6.10.0),用于图形化配置硬件并生成工程框架;
  • 开发调试工具:STM32CubeIDE(≥v1.14)或 IAR(≥v9.50),本文以 STM32CubeIDE 为例;
  • 烧录工具:STM32CubeProg(≥v2.15.0),用于镜像烧录与外部 Flash 启动配置;
  • 开发包:STM32CubeMP13(v1.0.0 及以上),含 HAL/LL 驱动、BSP、中间件及示例工程,可通过 STM32CubeMX、ST 官网或 Github 下载。

1.2 开发包核心组成

STM32CubeMP13 开发包采用三级架构,适配 Cortex-A7 内核裸跑需求:

  • Level 0:底层驱动,含 HAL、LL、BSP、CMSIS,支持 ADCI2CSPI、ETH 等主流外设;
  • Level 1:中间件,含 AzureRTOS(ThreadX)、USB Host/Device 库;
  • Level 2:应用层,含板级示例、工程模板、外部加载器等;
  • 支持模块:覆盖 GPIOUART、SDMMC、DDR、ETH 等核心外设,提供 LED、LCD、SD 卡等 BSP API

2. 工程创建:两种快速落地方式

STM32MP13x 裸跑工程可通过 “CubeMX 生成” 或 “开发包导入” 两种方式创建,按需选择即可:

方式一:STM32CubeMX 图形化生成(推荐新手)

无需提前下载开发包,CubeMX 可自动联网获取,步骤如下:

  1. 打开 STM32CubeMX,点击 “ACCESS TO MCU SELECTOR”,搜索 STM32MP13 系列型号(如 STM32MP135FAF7);
  2. 弹框选择 “MP13 Bare Metal”,确认创建裸跑工程框架;
  3. 进入 “Project Manager”,设置工程名称、路径,工具链选择 “STM32CubeIDE”;
  4. 切换至 “Pinout & Configuration”,启用 RCC、DDR 等核心外设,配置引脚与时钟(若提示时钟错误,点击 “Yes” 自动修复);
  5. 切换至 “Clock Configuration”,设置 CPU、DDR、总线工作频率,系统自动匹配合适参数;
  6. 点击 “GENERATE CODE”,CubeMX 自动下载开发包并生成工程,完成后可直接在 STM32CubeIDE 中打开编辑。

方式二:导入开发包示例工程(适合快速验证)

若已下载 STM32CubeMP13 开发包,可直接导入现成示例工程,步骤如下:

  1. 打开 STM32CubeIDE,点击 “File→Import→Existing Projects into Workspace”;
  2. 浏览至开发包示例路径(如ProjectsSTM32MP135C-DKApplicationsFSBLAFSBLA_Sdmmc1);
  3. 选中目标工程(如 FSBLA_Sdmmc1_A7),点击 “Finish” 完成导入;
  4. 工程导入后可直接编译调试,或基于示例扩展自定义功能。

3. 在线调试:SYSRAM 与 DDR 两种场景适配

STM32MP13x 内置 128KB SYSRAM,小代码可直接运行于其中;大代码需借助 DDR,调试方式略有差异:

3.1 SYSRAM 调试(代码≤128KB,快速验证)

适用于简单外设测试(如 GPIO、UART),步骤如下:

  1. 开发板切换至 “Engineering boot” 模式,连接 Type-C 电源与 MicroUSB(板载 ST-Link);
  2. 右键工程,选择 “Build Project” 完成编译;
  3. 点击 “Debug As→STM32 C/C++ Application”,进入调试配置;
  4. 确认 “Debugger” 标签页中 “Load Mode” 选择 “thru JTAG/SWD link”,点击 “Debug”;
  5. 即可像 MCU 调试一样设置断点、单步执行,程序直接运行于 SYSRAM。

3.2 DDR 调试(代码>128KB,实际项目常用)

需先初始化 DDR,再将程序链接至 DDR 运行,步骤如下:

  1. 导入目标工程(如ProjectsSTM32MP135C-DKExamplesBSPBSP_BasicTemplates);
  2. 配置工程支持 DDR:
    • 右键工程→“Properties→C/C++ Build→Settings→Preprocessor”,添加USE_DDR宏定义;
    • 修改链接文件:将默认链接文件重命名为stm32mp13xx_a7_ddr.ld,修改REGION_ALIAS定义,指定代码链接至 DDR 区域;
  3. 初始化 DDR:导入DDR_Init工程(路径ExamplesDDRDDR_Init),编译后全速运行一次(保持开发板不掉电),完成 DDR 初始化;
  4. 调试配置:回到目标工程,进入 “Debug Configurations”,删除 “Startup” 页面的 “monitor reset” 命令;
  5. 点击 “Debug”,程序将下载至 DDR(地址以 0xC000 开头),可正常调试。

4. 镜像烧录与外部 Flash 启动(最终落地)

裸跑应用需烧录至外部存储(如 SDCard、QSPI NOR Flash),启动流程为 “ROM CODE→FSBL-A→用户程序”,核心步骤如下:

4.1 启动流程核心逻辑

  • 芯片上电后,先运行内部固化的 ROM CODE;
  • ROM CODE 从外部存储(如 SDCard)读取 FSBL-A(First Stage Boot Loader-A),拷贝至内部 SYSRAM 运行;
  • FSBL-A 完成 DDR 初始化、存储设备初始化,读取用户程序并拷贝至 DDR;
  • 最终跳转到 DDR 执行用户程序。

4.2 镜像准备(添加 STM32 Header)

ROM CODE 仅识别带 STM32 Header 的镜像,需为 FSBL-A 与用户程序添加头部,步骤如下:

  1. 打开工程 “Properties→C/C++ Build→Settings→Post-build steps”,添加命令:
    "(path_to_STM32CubeMP13_Package)/Utilities/ImageHeader/postbuild_STM32MP13.sh" "${gnu_tools_for_stm32_compiler_path}" "${BuildArtifactFileBaseName}"
    
  2. 重新编译,生成带 STM32 Header 的镜像(如 FSBLA_Sdmmc1_A7_Signed.bin、MP13_BSP_BasicTemplates.stm32)。

4.3 烧录配置与执行

以 SDCard 启动为例,使用 STM32CubeProg 烧录,步骤如下:

  1. 准备烧录文件:
    • FSBL-A 镜像:FSBLA_Sdmmc1_A7_Signed.bin(烧录至 SDCard 的 LBA128 或 LBA640);
    • 用户程序镜像:MP13_BSP_BasicTemplates.stm32;
    • 烧录工具文件:从开发包External_Loader目录拷贝STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32SD_Ext_Loader.bin
  2. 修改 tsv 文件:创建FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv,配置镜像烧录路径与类型(参考开发包示例);
  3. 开发板设置:跳线切换至 “000” 模式上电,连接 MicroUSB(断开 USB OTG),查看 COM 口;
  4. 烧录操作:
    • 打开 STM32CubeProg,选择连接方式为 “UART”,选择对应 COM 口并连接;
    • 点击 “Open File”,选择上述 tsv 文件,指定文件目录;
    • 点击 “Download”,完成镜像烧录;
  5. 启动用户程序:开发板断电,切换至 SDCard 启动模式,重新上电,ROM CODE 将自动引导 FSBL-A 与用户程序运行。

5. 核心注意事项

  1. 开发包兼容性:确保 STM32CubeMX、CubeIDE、CubeProg 版本匹配,避免因版本差异导致工程生成或烧录失败;
  2. DDR 调试关键:必须先运行 DDR_Init 工程初始化 DDR,且添加USE_DDR宏定义,否则程序无法在 DDR 中运行;
  3. 镜像头部:FSBL-A 与用户程序均需添加 STM32 Header,否则 ROM CODE 无法识别;
  4. 烧录位置:FSBL-A 需烧录至 SDCard 的 LBA128 或 LBA640,ROM CODE 仅从这两个位置读取。

相关推荐