你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在 STM32MP13x 系列 MPU 上裸跑应用程序

[复制链接]
STMCU小助手 发布时间:2024-11-22 19:09
01 引言
. c1 y3 L; k; L% k9 NSTM32MP13x 系列 MPU 是 STM32 Arm®Cortex® MPU 家族中的一部分,它拥有单核Cortex®-A7 核心,支持核心频率 650MHz~1GHz,不仅能够轻松运行 Linux 操作系统,还同时提供官方 HAL 库,用于支持基于 RTOS 或无 OS 的项目方案,即裸跑应用程序。
+ j0 Z3 H) a' J4 |) K2 {8 H7 f9 S% F
本应用文档将就以下几个部分简述如何在 STM32MP13 系列 MPU 上开始无 OS 项目的开发:
/ L. P5 x; j; h2 D6 l• STM32MP13x Baremetal 开发环境简介4 m; q5 |8 @0 S. R) ^
• STM32MP13x 工程的创建
! p2 O: h5 w% M8 k( b5 \: }, g: |• STM32MP13x 工程的在线调试+ l. d' I! e5 L. f. z; W
• 镜像烧录及从外部 Flash 启动
: s2 J+ N3 f+ }  g2 d

  T- L$ ]! s6 f4 n! ?& A02 STM32MP13x Baremetal 开发环境简介
( Q$ H2 d( C$ h9 x& S' D* O9 Y2.1 开发工具及环境9 t) V- a" n6 X: e
STM32MP13x Baremetal 开发工具主要包括:0 H  e- k' H3 }! F( w# S' ~
1. 烧录工具:STM32CubeProg ( 版本大于 v2.15.0)7 g, C+ s* ]0 E
2. 配置工具:STM32CubeMX (版本大于 v6.10.0)
! u& H  D( E, M' t/ e" B9 T+ [3. 开发调试工具:IAR(版本大于 v9.50),或 STM32CubeIDE(版本大于 v1.14)
! C6 ^) A; z3 `( [8 D本文示例基于 STM32CubeIDE 开发调试工具。$ j' P# e% @# U% {# J

& G5 X* r; E1 Z3 a- o0 Z8 G
. Z" J- Y$ `6 O# c! R
2.2 STM32CubeMP13 开发包4 C1 G$ Q, D/ q' }
STM32CubeMP13 开发包同步发布于 ST 官网 www.st.com 和 github.com,可通过如下方式下载:* w' W5 m) {# b7 Y$ C3 F6 [$ {
1. ST 官网下载链接! M* a+ P( H3 B! j, k  ?
2. Github 仓库链接7 \! ^, ^; J+ j4 A# f
3. 通过 STM32CubeMx 软件下载
1 m. W3 v& M( |* F; W, K1 H- O
; Y) y, J) }: M5 H% Y7 r+ [
2.2.1. STM32CubeMP13 开发包总览9 b' ^) L; j  s# W' e3 w6 I6 Z5 n
STM32CubeMP13 开发包运行在 Arm® Cortex®-A7 处理器上,由以下三部分组成:7 s; o9 V, S8 \$ f
• Level 0:驱动程序,包含 HAL、LL、BSP、CMSIS" U: Q3 R, e8 z5 _" u" O7 v
• Level 1:中间件,包含 Eclipse ThreadX(原 AzureRTOS),USB Host & Device 库* c. @- ^/ k. f
• Level 2:包含各种板级示例程序5 k, u6 R3 N  [- ~
除此之外,还包括一些工具助手等。
$ Q) }8 B' n! s/ |2 ^( Y" B
% }: c4 t5 ~7 M6 ^6 Q( ~$ @3 B4 Z3 x( U
7 j/ k2 k2 l; Q: e/ y' v
1.png
8 j1 V* z3 S$ e8 c
▲ 图 1 Baremetal 开发包源码框架0 R# \6 I: w+ c! P4 o" C
, L( O/ ?. t+ J; W

( Z' w1 t% ~) _- |8 e8 k& ~2.2.2. 源码目录结构4 {, v: ^! A3 }8 ^
2.png ( M3 @2 q7 b$ U3 w6 k" Q; P
▲ 图 2 Baremetal 开发包源码目录1 L6 ^) n5 k1 {& O% H

+ ?/ Q- W1 l$ ^% V! W. |
2.2.3. 开发包支持模块列表
8 g, P& T7 _3 T5 |已支持的 HAL drivers :
1 O; M4 U) z8 A) ?6 J• ADC, BSEC, CRC, CRYP (including SAES), DCMIPP, DDR, DFSDM, DMA,DTS, ETH, ETZPC, EXTI, FDCAN, FMC_NAND, GPIO, HASH, I2C, I2S, IWDG,LPTIM, LTDC, MCE, MDMA, PKA, PWR, XSPI (QSPI replaced with XSPI),RCC, RNG, RTC (including TAMP), SAI, SDMMC (including EMMC), SMARTCARD, SPDIFRX, SPI, TIM, UART, USART, USB2 x& ?/ j& S2 l* R

8 k7 L, L  e$ \
已支持的 LL drivers :
* P' M' R# a( F, I, Y• ADC, DMA/DMAMUX, EXTI, ETZPC, GPIO, I2C, LPTIM, MDMA, PWR, RCC & BUS, RTC, SPI, TIM, USART
9 |$ z- K5 j1 f: \. e
& N" ?9 t/ P  l; v
BSP 与 BSP 组件:
( Q& ~* o1 f: _/ b• 基于 HAL 封装了更高一级的 API,为 LED、按钮、相机、LCD、SD 卡和 COM 端口提供 API,包含了以下一些外围器件的驱动:GC2145, LAN8742, MCP23x17, RK043FN48H, STMIPID02
+ u6 z7 A, f. q- Y
, w* d/ Q, r- s9 p/ S, l* S
中间件程序:
- E0 L# Z8 O# e/ \6 b% H• 包含一系列支持某种服务的库文件及接口文件,目前已支持:Eclipse ThreadX(原 AzureRTOS),STM32_USB_Device_Library,
$ J/ o9 n4 i. T2 RSTM32_USB_Host_Library
$ [) k4 V" I: C0 O; r( q9 q, o1 z, H
$ v, `, B3 f: z( c- O
项目工程:
- ?- P$ ?% W4 U* T2 g; C• Examples:基于 HAL 接口的简单示例,没有中间件功能。
4 J2 i* g# P4 D% r' r• Applications:较完整的工程应用实例,包含中间件功能。+ Y$ Z, i& q; [" B
• External_Loader: 烧录镜像及从外部存储器启动的应用示例。
4 U8 ]+ s! v9 Q5 R• Template: 板级工程应用框架。
1 h) C+ P3 W  j+ }! j
2 K0 j0 M& |" w
实用工具:
: z! _# p9 x$ I& J2 {• Imageheader:用于添加 stm32 头,支持存储设备启动。
( i! o  c0 g( v7 f8 n• Fonts:提供了一组用于显示的标准字体,包括 font8,font12,font16,font20,font24
! M7 |! i7 n9 K' b$ k" b6 q9 n: Z, S) f0 o4 |; u9 _
3 Z) u+ y4 h* q0 |* }" y
03 STM32MP13x 工程的创建
( ], \. [2 I/ Z2 ~6 R! WSTM32MP13x 工程创建,可通过以下两种方式:$ ~' {1 |) p3 r/ t9 j; Y
1. 使用 STM32CubeMx 配置并生成项目框架代码,并基于该框架代码开发应用。
+ f$ ]  g# T7 j9 K& N2. 导入 STM32CubeMP13 开发包示例工程代码,并基于该示例代码开发应用。
  U( D' U6 z* x, J" m
! f% H( h1 b( M  Q8 c) G* o3.1. 从 STM32CubeMX 创建工程( P; {! m& Z$ m% d0 L/ b
STM32CubeMX 是 STM32Cube 工具家族中的一员,它采用简单易用的图形界面,可以帮助开发者快速配置硬件和软件。可支持从 MCU/MPU 选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置等,并可生成适用的 C 代码项目。
9 Y3 Q1 b% |* H" ]7 c2 Y3 J6 v8 @! Q$ j1 Y
本章节简述如何通过 STM32CubeMx 生成适用于 STM32MP13x 的裸跑应用框架。使用该方式无需提前下载 STM32CubeMP13 开发包,STM32CubeMx 可自动联网下载。5 J" Q6 c0 S0 u$ C0 _: g' s
1. 打开 STM32CubeMX,点击 ACCESS TO MCU SELECTOR,
+ v$ `! d0 S$ [2 P9 M" A  g2. 在搜索框中输入 STM32MP13 相应料号,如:STM32MP135FAF7,双击打开配置窗口
$ A/ `* R+ R7 a, y9 D3. 弹框选择 MP13 Bare Metal,将生成 bare metal 工程框架。
( t3 u) ^$ o, l2 K$ J 3.png   a( h; }4 Y+ h2 |5 |

/ E3 A0 u" l: [: K. g& I▲ 图 3 STM32CubeMx 选择器件
: k3 @. F/ y$ M. _ 4.png
7 i0 y( L' c. O& y8 C

) O1 m/ r. B+ |; W4 i▲ 图 4 STM32CubeMx 选择工程类型8 t, N3 i% k# H

9 ]0 n" r: F- v) \9 C

5 }  s- n7 _2 J4 y) @2 Y; o/ y+ _/ O4. 切换到 Project Manager 标签页,输入工程名称。
: q: }% o: W% C, p" \# O# |5. 在此页进行项目选项配置,可保持默认。& B; q9 q# U" F! I5 D: w7 X% @
5.png
' Q0 G7 \# ]$ ]7 O* F" g' L* \/ r
* K( ]  A3 J) ?8 |# ?( W9 L1 S
▲ 图 5 STM32CubeMx 工程设置页面
6 H/ V; t. P6 ?& n1 W/ o& U& N- \( D2 x0 b2 j; w/ p8 \$ ^

& X+ v  m; r5 w% V6. 回到 Pinout & Configuration 标签页。4 f& L0 {& O! R2 h
7. 使能 RCC 和 DDR。) W/ z% y- b! A% b
8. 配置各外设总线,配置方法与其他 STM32 MCU 相同(也可参考 Help -> Docs & Resources)8 y: {( [. Z7 i  R0 t

) n, b! j7 Y6 b+ B0 w
1 g+ U! K* Y3 Y; F5 F* q: q) a4 o$ A

# \. N; c1 K( X( R# @* q' o 6.png
# o4 `  ^4 c( c6 m& ?/ m

0 I% f0 j+ v0 h, N  J! E; }! m▲ 图 6 STM32CubeMx 外设配置页面0 ^. r/ P+ ]7 W" h! F$ H
: i. w" J  e, h  n* f; y
) I6 [8 H: U  g% T% ?/ k5 l! z& ~1 t
9. 切换到 Clock Configuration 标签页。
5 }  Q/ T! c5 l1 m5 c9 S* V6 C- t2 N( B10. 若软件报告时钟错误,可点击 Yes 自动修复。6 c% o# }/ L' v# @0 s9 M
11. 输入 CPU、DDR、总线等的工作频率,系统会自动匹配合适参数。
/ `- O" }' F" L
) O' n8 s/ m! m; a' |
7.png
8 f. \8 S+ R' q/ ^  d7 \7 ?▲ 图 7 STM32CubeMx 时钟配置页面/ _) N  Y0 c6 q4 ~1 u1 B6 o& z  Q
; ~+ E- i7 M6 ^# E% f

' D! Z! H8 c% w! A# {2 b12. 所有外设配置完成,即可点击 GENERATE CODE,开始生成工程代码。
: f+ L# p% _' w: e2 w4 ^0 O+ \13. 若第一次使用,软件将提示是否下载 STM32CubeMP13 开发包,可点击“yes”,软件自动联网下载前述 STM32CubeMP13 开发包。( ]/ y! i7 ~5 ^) K) q
14. 生成完成后,可直接点击 Open Project,将打开 STM32CubeIDE 工程。
# u2 z$ d+ U& {+ D1 z% ?( _ 8.png , t( y9 P- y% N8 u1 J% y
# @; Z0 X- t) f+ ]' i8 G+ m  v. y
▲ 图 8 STM32CubeMx 代码生成页面* K+ X4 _7 N1 ?, m. R+ D" D7 q: b7 O  h
9.png 8 h' {1 I8 Q) v7 H) G5 ?1 X% ^7 t
▲ 图 9 STM32CubeMx 完成代码生成页面1 T& ?. q$ u( t6 J" d
10.png / R8 X, T, B0 w. h* a0 \7 R
▲ 图 10 STM32CubeMx 生成工程代码示例% j3 q* X8 z  A' h; w9 _1 Y5 e* p

  j: }; [; m9 f3 i8 z' O1 c3 }( i
15. 至此,工程框架已生成,可通过 STM32CubeIDE 进行用户代码的编辑、编译、调试。
' |1 T) `1 a& R: J  @4 n/ ^& e. W5 P: d4 Q2 W1 m
- D  a0 U, z# e: J: ]" w
3.2. 从 STM32CubeMP13 开发包导入工程
' ~$ Q' N+ O2 [* M0 L若已事先通过 ST 官方网站或 Github 下载了 STM32CubeMP13 软件开发包,也可导入开发包中的工程示例代码,从示例代码开始进行项目开发。! M: Q2 b$ H9 j% F

2 m1 u4 K( y' R; ^! i) }3 i
这里以 FSBLA_Sdmmc1 工程为例。1 }$ o" l; h- B" b) w8 b
项目路径:\Projects\STM32MP135C-DK\Applications\FSBLA\FSBLA_Sdmmc15 Q& O8 ~/ i4 h; B) Y
1. 打开 STM32CubeIDE,导入 project% H$ t5 X: ]- r6 {0 W/ }2 b5 t
2. 点击 Files -> Import…
7 x; z8 S( _- Q0 ]1 f# r1 W, { 11.png - ?8 f; i0 J6 h8 m" V1 y
▲ 图 11 STM32CubeIDE 右键项目菜单- Z4 [. S( e- V0 @+ ~( R2 ^
! k' l4 `2 B$ b

/ |" B' H8 l: x' y3. 选择 Existing Projects into Workspace3 }" n$ M  T- \  ^# p: l: y
4. 点击 Next>+ e# E  w" B1 f! u
12.png
3 X5 j: A& V3 q; A1 T3 J
7 O+ e+ |: h% A8 a& `; X
▲ 图 12 STM32CubeIDE 导入已存在项目
+ o; D: \/ _* U$ @7 k( ^* O% l" O5 V
2 h" s$ k% S. x  N' s: U

+ b* L" B( u8 j4 q1 q2 S4 e: d5.点击 Browse…,找到目录 \Projects\STM32MP135C-DK\Applications\FSBLA- z! @% {' A) e( a0 {1 C
6. 选中 FSBLA_Sdmmc1_A7 工程
& X0 |. m, R) d5 O# l7. 点击 Finish,导入 Project
3 {" V/ S, O) l& P  b+ N 13.png
- ]% M* M  h5 o: y; |
! L2 n  |9 D& z6 F+ t2 c) ]4 O
▲ 图 13 STM32CubeIDE 选择导入项目' Q4 ]0 u) u$ u. ~1 R
5 v* A& C; v1 i: ~1 j

, C) r1 s- e1 Z1 l6 Q; f* ^8. 工程导入完成。! X7 x" F# B# s: t

/ v! p1 }. C% M2 }' C
5 T/ s) M+ _2 C5 W6 L7 c
04 STM32MP13x 工程的在线调试1 b7 {9 {* v+ b
工程创建完成后,接下来本章节将介绍如何基于 STM32CubeIDE 进行工程编译及在线调试。
; r$ p/ n: i' A" \5 U
) P) y! J5 u1 K7 P; ~7 W0 _
STM32MP135 内部包含 128KByte SYSRAM,若代码小于 128KByte,可直接运行于内部SYSRAM 中,适用于验证一些简单的外设实例。若代码大于 128KByte,则需要将程序运行于DDR 中。下面将分别阐述。$ t+ B4 l* m7 M3 x# r% Y

( {7 s! q- n7 b+ e4.1. 在 SYSRAM 中调试程序
4 K( Z+ L$ e  j仍以前述导入的 FSBLA_Sdmmc1_A7 工程为例。, R2 b1 V6 W  J0 g
1. 首先,将开发板切换到工程模式
" B4 F8 u* D  ^; ], s1 @/ `2. 连接 Type-C 电源3. 连接 MicroUSB,这里板载已支持 ST-Link
+ x8 P0 u+ [9 B- Q# t1 q+ ^ 14.png
/ Z7 C( f7 a) l2 v
$ A; e: G0 ?/ s
▲ 图 14 开发板切换工程模式
$ Q/ D2 j* S7 A+ e
6 ^. b  R# M+ X
4. 右键项目工程名称,选择 Build Project,完成编译。
$ X8 n: Z! o' n 15.png
! D1 C7 y( L8 f* ~

4 r. C  Q' L* U8 R▲ 图 15 选择编译工程
# h; v8 B$ v/ g9 a! O% u% L# b) Z% s3 j# f4 i/ {4 f2 }+ Z

1 o. N/ A2 g1 [. P2 H4 _5. 右键工程名称,选择 Debug As -> STM32 C/C++ Application+ x: k9 e# E7 L( g$ ]$ G
16.png 8 H# W7 ]$ F# v- v5 ?+ p
5 r% R9 x! h& Q4 ?6 N
▲ 图 16 选择调试项目方法 1# }$ V2 r, B9 `6 q0 g4 z
6. 或点击 Debug 图标
4 X+ V7 S3 m. f" A7. 进入 Debug Configurations….3 z1 R* T( q0 `% D- D7 ?" p
17.png , C7 Q) Q; \2 V. c; l
4 e7 q0 d& R. L( q" |9 t! C3 h
▲图 17 选择调试项目方法 2
% \# l, x) C$ V, y5 [
& g! T8 d% M& T- B' S3 e

* N9 v. g8 \7 h9 W. l8. 进入调试配置菜单
5 W# u" m! j0 e; Y9 H0 W& } 18.png 6 B% H3 O+ x- o
& [7 P. m2 y3 i3 A- |1 Z
▲图 18 调试配置页面4 v5 v2 u+ f* [9 `8 P

% Z# M: {. }4 a4 t* ~, Y2 ^1 e! i

/ p8 k1 M8 z# m- Z$ V 19.png 5 U+ Y; Q* M* R1 E
9 P4 l8 d: |) [) v4 T
8 P! T2 M( M: U2 U
% q$ u# ^! p- ~
9. 即可像 MCU 一样调试您的代码。% f! Q- O7 _- p) B
20.png ( B* e! E! d$ C2 I' I; S7 l
9 D; r/ a6 o( [# n5 x" D' \
▲图 19 项目调试窗口3 }* B5 F; A0 A: }- \8 q

3 D: J3 ^9 L& e' k* g2 [4.2. 在 DDR 中调试程序
  ?8 `7 [, f; I当代码量超过 SYSRAM(128KB)的大小时,需要将程序运行在 DDR。这里以 BSP_BasicTemplates 工程为例展示如何开发运行于 DDR 的用户程序、
! Z9 l; Y" H2 s& X9 n/ j  ]5 Q  Y) a; z! C2 j' c
1. 首先,按照前述方法导入项目工程( f, }$ i3 _) X4 i- j
21.png
& p7 C; O/ W& f& E, P' L! V

' L# V2 Y6 z8 ~▲图 20 导入 Templates 工程8 z, ~8 T( l3 m3 ?% l  x

0 a9 ]6 [/ O6 h7 g6 g2 o

% e7 g1 \' z: {# e2. 打开 C/C++ Build 配置' M+ }1 t$ x8 L' j+ w: D/ Y
3. 在 Preprocessor 中添加 USE_DDR 宏定义) ?! }+ ?$ w, v7 z5 A
22.png ( u/ C4 S! ]1 Q+ E) C2 J

+ U2 u( B3 O3 _  U" a0 q▲图 21 使能 DDR 宏' l) y$ P# h1 B3 W+ P8 ]* ^
7 X7 ]  ]9 [, J8 K& W$ T& I5 q' C
  o3 D7 R$ ]% G* s" U, o3 F, @! r
4. 修改链接文件,重命名为 “stm32mp13xx_a7_ddr.ld”
4 \2 n) A3 |+ H8 t& h1 H* O5. 修改 REGION_ALIAS 定义到 DDR 区域:
# @7 B4 a" t+ h6. 重新编译后,目标文件将链接到 DDR
  O/ S2 \: h% b1 o 23.png 8 p) |, f3 V  R% G! J& L( e  n
' u; G& G. {) _( b
▲图 22 修改链接空间4 ^, J" D2 M* _+ Y
24.png 6 L: ~" u) f3 u  |" F. A7 T6 i( ~

+ ^& N! q: z! }. V2 J- T▲图 23 选择链接文件' K7 C1 I. ]- ~0 \# h/ \( s

( {1 a  N7 V  [9 _
7. 在调试之前需要先运行 DDR_Init 对 DDR 进行初始化
! H& _7 m% _+ S" Y5 J5 b8. 按照前述方法导入 DDR_Init 工程,编译后全速运行一次,并保持开发板不掉电项目路径:\STM32MP135C-DK\Examples\DDR\DDR_Init
3 E1 {& t, b8 ~# t8 w# Y8 M 25.png
# U. v" Z* T: j, a+ T. c
* S* t) u+ X4 M# C! }  p' O
▲ 图 24 运行 DDR 初始化& |8 E; k5 ^& a; g% \+ _: |' Z5 [4 i+ n

. R$ k1 c& B1 S& N" N9 T+ F

* ~' J) x+ T/ L3 O. L( Z# `/ C9. 回到 BSP_BasicTemplates 工程。
5 t, N- p: ~! i  q9 Z# N; B+ X10. 在 Debug configuration 对话框中,将 Startup 页面的 monitor reset 删除。
/ E( Z. m' R0 y9 P 26.png
+ D" v0 ~. X/ z* z* r6 s8 s/ B

/ e+ j. d: v" `( {▲ 图 25 修改调试参数" h! I- F3 ^3 D+ r
+ G& B; S2 j5 F2 \" z8 U9 N
) q0 {. F+ U$ i: C( Z
11. 点击 Debug 进入调试
( ]/ [5 n1 u9 X4 l- @12. 可以看到当前 main 函数的地址已经为 0xC000 开头的 DDR 位置
* J) d. I/ M0 d: }8 L
& n  D5 m/ Z' \
# }" X5 S- S' s9 {6 I
27.png ' Q1 d% ^8 @. N7 A. d
/ a' n3 L" p6 l2 e2 a
▲ 图 26 在 DDR 中调试工程
& D+ ?0 i/ S" q, ~+ O# P$ y
3 y: k' L% R0 b" X3 _+ F9 \7 }9 H

6 J" p5 q" Z1 `05 从外部 Flash 启动5 e( u# B& m" l6 N! x
28.png
! i" U! j' x, \- i5 H/ p
8 o/ r1 k+ |* w1 D1 V
▲ 图 27 STM32MP13 启动流程
# L: D6 G# C4 a4 ^$ l) M2 c' @; J' W  E1 n
从外部 flash 引导 STM32MP13, 一般需要包含两个部分源码。如上图所示,芯片上电后,首先运行内部固化的一段 ROM CODE,ROM CODE 从用户配置的启动器件中寻找 FSBLA,并将其拷贝至 SYSRAM 中,FSBLA 运行后,执行 DDR 初始化及用户代码(CUBE EXAMPLE)拷贝到 DDR 中,最终实现跳转到 DDR 中运行用户程序的目的。
) M* n. t7 U  s# H: s9 x
* M/ M# g) S/ y$ U& y5 q. S; A
这里以 SDCard 启动为例,在第三章节中,我们编译调试的 FSBLA_Sdmmc1_A7 工程,即实现了 FSBLA 部分的功能,BSP_BasicTemplates 工程为实际开发的用户项目。完成启动需要将这两个工程生成的镜像文件都烧录到 SDCard 中。4 B: T% i& l( j2 g) |
2 e6 p( `: X' e* B; {% f
• FSBLA 需烧录到 SDCard 的固定位置 LBA128 或 LBA640,ROM CODE 固定从这两个位置寻找 FSBLA。
& c4 u7 u* r7 {  m- R; h6 T5 j• CUBE EXAMPLE 的存放位置可在 FSBLA 程序中修改,默认为 SDCard 的 LBA640。+ s# S& l& G- e4 r; B( ?1 H# X, r  Y
• 如果有烧录过 OpenSTLinux 的卡,需先格式化。原因是 ROM Code 优先从 GPT 分区表中寻找 FSBLA,若分区表存在,新烧录到 LBA128 位置的 FSBLA 将会被忽略。
- \( M" X# g' U" z# q 29.png
( r: R4 w+ C8 Q/ D- N* G
▲ 图 28 镜像在 SDCard 中的 Layout/ Y/ r. s" z' J* O, K
# l2 k- [5 y" b9 A) Z2 t# k1 Q
需要注意的是,FSBLA 和 CUBE EXAMPLE 都需要加入 STM32 Header,才能被系统识别。STM32 Header 是 ROM CODE 加载二进制文件的必要格式,每一个被 ROM CODE 加载的二进制文件都需要在头部添加特定的 STM32 Header。STM32CubeMP13 开发包中提供了ImageHeader 工具,用于为项目二进制文件添加 STM32 Header。开发者不需要深究 STM32Header 的详细内容。
0 y- _3 p5 x! a1 ]' I0 [$ m 30.png
0 @  I2 m( `) v$ R6 m# R/ ~
▲ 图 29 STM32 Header 信息
  C  p8 r: i  ^- [8 G; q) B; L$ ]# i
为用户程序加入 STM32 Header,可在工程配置的 post-build steps 中加入如下命令:9 @1 S( ~8 k- k# b1 }$ ^7 E
“(path_to_STM32CubeMP13/ B$ N  f! }7 X1 C
Package)/Utilities/ImageHeader/postbuild_STM32MP13.sh"1 p0 v) g& A8 E7 Y* g7 k) q
"${gnu_tools_for_stm32_compiler_path}" , c* v) p; `* p
"${BuildArtifactFileBaseName}"7 q/ V1 Q( K/ C: e

3 U' H% S1 h2 m
; y3 M6 F4 |  p* t7 \; ?
重新编译完成后,即可生成打上 STM32 Header 的目标文件。1 ~% F6 U7 j& Z9 [% G
31.png
% ^6 W: ~0 _) h4 ]/ R* s: j0 T% L! N
▲ 图 30 添加 Post-build 命令
, F- e* B5 g4 D: F
7 K. a5 R' e7 c* P4 I& z' o注:path_to_STM32CubeMP13 Package 为 STM32CubeMP13 开发包的存放路径。
& \' A# y6 p! ?6 J, V4 Z, [# F, c  U$ ^( G
至此,已准备好待烧入 SDCard 的目标文件:8 }/ S, }$ R* F9 w& |- V) j
1. 已添加 STM32 Header 的 FSBLA_Sdmmc 目标文件:FSBLA_Sdmmc1_A7_Signed.bin (即 FSBL)8 ?: ]; y2 K2 Q. E! L  V
2. 已添加 STM32 Header 的 CUBE EXAMPLE 目标文件:MP13_BSP_BasicTemplates.stm32(即用户工程)
) ]9 t0 l) y% B2 E, ~5 D0 L2 t
% y) a9 d7 Q  G+ U( Q2 o8 y
烧录工程位于 STM32CubeMP13 开发包的如下目录:
3 U) _) J$ ^+ N; f9 D- P2 y7 L\Projects\STM32MP135C-DK\External_Loader,以二进制的方式提供了烧录时需要的两个引导文件,包括:% T7 @9 n0 L9 A. J/ u* v
1.STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32
: C  O  w3 T) i  m: o2.SD_Ext_Loader.bin其中,STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32 为基于开源工程。; H* V. o; J5 Q+ a

  H! S' [. ~/ G- |' ~
- o. v8 f. d* @/ D
Openbootloader 实现的一套 IAP 应用,执行烧录流程管理。SD_Ext_Loader.bin 工程执行SDCard 设备的实际擦写操作。
  K( G3 h/ d$ r0 `& x( R! T( C1 t4 p# \2 g
) R! K" V/ {! x) \
目前,引导设备可支持 SDCard,QSPI NOR FLASH、EMMC 等,若项目开发中需要修改适配不同的存储设备,可联系 ST 窗口获取烧录工程源码。) I- x6 Q1 X9 F" V* u! S! q: {1 T

1 {; L" d; D( ^: l# e! M8 F: H! y
将需要烧录的两个文件拷贝到 External_Loader 目录下,与烧录工程的两个文件存放在相同位置,然后修改 tsv 文件。完成后,目录中文件列表和 tsv 文件内容如图所示。$ N- t& d" f* ]7 n5 n
32.png # P* e* ]0 f( }, m+ z5 W
▲ 图 31 烧录文件列表/ `! J( ~, R! v' [* {; k: `3 Z
33.png
6 {. Y0 R" I/ O6 R' e
▲ 图 32 tsv 文件内容& ~. r# r) x0 I8 }3 S6 N8 n0 n2 o

  H4 h/ e# ~+ y7 C
% V. p" Y* h5 N! {7 W- F
接下来,即可使用 STM32CubeProg 进行镜像烧录。可支持通过 USB 或 UART 连接,不支持通过 ST-LINK 连接。这里以 UART 连接为例:
# [) U' k; |) Q3 c5 @) q+ Y1. 开发板跳线设置到 000 并上电
+ r' ^8 u( y2 [. i2. 连接 MicroUSB 口,查看 COM 号。注意通过串口连接时需要断开 USB OTG' j! B1 j% Y* m/ W4 N8 h4 v4 E# x9 \
3. STM32CubeProgrammer 选择连接方式为 UART,选择相应 COM 口
8 {; z; L. L3 z: `, L" h4. 点击 Connect 连接5 y# h: f# T+ x- n/ Z% w- _7 ]
34.png 4 v; J& w$ B5 B, X# z& l$ h

5 X( J  k0 H: t) L3 p( [$ y* @9 x 35.png % T' }/ s% P$ |9 h
5. 点击 Open File,选择 FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件' [, ^2 E' I6 d$ d/ l/ I0 C3 y
6. 点击 Browse,选择目标文件夹:\Projects\STM32MP135C DK\External_Loader\SD_Ext_Loader9 [1 E3 R6 O3 {" i; T$ A* B
7. 点击 Download,开始下载镜像0 y9 G' w# e( |9 u. l- L8 _# e% e
36.png
* B& @  a8 R# A+ Z6 O3 I5 T' N3 d" g
7 n& }; ~. ?. }! K) i$ k
37.png 2 V' U: ]: K' l. W6 c5 T* h
5 U! C. g: L' N: o* G6 f
8. 等待烧录完成0 @% L) W; Y* v; t- ~" x
9. 将板子断电,boot mode 切换至 SDCard 启动
! Q; C8 z% b/ o* j6 q1 k10. 重新上电,即可引导启动
( f* m( J+ _' O7 ~9 l: o* M$ w 38.png - f! z" G; ^, X, E+ y9 `* u6 h
, O, ]8 v4 _. _
转载自:STM32
# v3 U) j' J  N- \; {0 @5 @( L1 C7 c  G* P* l, q, B5 M
# V# X1 `' Q* W6 D* e1 e' T
收藏 评论0 发布时间:2024-11-22 19:09

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版