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

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

[复制链接]
STMCU小助手 发布时间:2024-11-22 19:09
01 引言
& ~4 ?4 n0 g1 x0 g+ gSTM32MP13x 系列 MPU 是 STM32 Arm®Cortex® MPU 家族中的一部分,它拥有单核Cortex®-A7 核心,支持核心频率 650MHz~1GHz,不仅能够轻松运行 Linux 操作系统,还同时提供官方 HAL 库,用于支持基于 RTOS 或无 OS 的项目方案,即裸跑应用程序。
5 m- R* l# t( t  k% \
7 ?4 i( c, f" W+ A2 l
本应用文档将就以下几个部分简述如何在 STM32MP13 系列 MPU 上开始无 OS 项目的开发:
+ C/ _/ V6 `. j• STM32MP13x Baremetal 开发环境简介
% q% K' @/ f0 U. ~3 o+ o# q• STM32MP13x 工程的创建
+ l! C  |6 N2 z• STM32MP13x 工程的在线调试6 U  E+ G% `7 ~; j6 h2 e+ n
• 镜像烧录及从外部 Flash 启动3 m( @  |* N7 w9 u: G

4 s8 R. v$ R' [; W1 R02 STM32MP13x Baremetal 开发环境简介' C6 d0 B* y0 K- ?, k' S
2.1 开发工具及环境
' X, R3 f7 H6 G2 |  I. |7 ^9 X" oSTM32MP13x Baremetal 开发工具主要包括:
" r6 ~8 ]7 T- R8 o' z) x$ T% I' @1. 烧录工具:STM32CubeProg ( 版本大于 v2.15.0): Y& r7 P; A+ D4 E! M- m
2. 配置工具:STM32CubeMX (版本大于 v6.10.0)* t+ L: h+ L% d3 P3 r! J
3. 开发调试工具:IAR(版本大于 v9.50),或 STM32CubeIDE(版本大于 v1.14)9 R2 E9 O6 k9 a' r
本文示例基于 STM32CubeIDE 开发调试工具。
7 J9 T3 q) o5 a& \9 q/ e6 Z) |4 }$ ?8 [, l+ l, T# P

9 m4 u' s0 Y5 S7 f2.2 STM32CubeMP13 开发包7 b- e# k4 |; o2 f$ i
STM32CubeMP13 开发包同步发布于 ST 官网 www.st.com 和 github.com,可通过如下方式下载:
# T7 U' i  R, Y# L0 M1. ST 官网下载链接- G2 X: n8 {: b3 `- h* s, |" P
2. Github 仓库链接
& j& j/ a6 B, e; P3 |1 z3. 通过 STM32CubeMx 软件下载
- y, B- Z/ a* j+ X+ X% ^9 t
: f7 U- n# m  D# a! y
2.2.1. STM32CubeMP13 开发包总览8 q: A( U) F1 u. l' g7 |0 o  L2 A8 @
STM32CubeMP13 开发包运行在 Arm® Cortex®-A7 处理器上,由以下三部分组成:
- R, A$ t6 q% f3 m7 x9 ?2 o• Level 0:驱动程序,包含 HAL、LL、BSP、CMSIS
; j+ A0 {: C% ~" V4 e• Level 1:中间件,包含 Eclipse ThreadX(原 AzureRTOS),USB Host & Device 库7 z) ^$ i2 t  N
• Level 2:包含各种板级示例程序
' h# a5 I  v# v. C3 w: z0 D/ I& m  m除此之外,还包括一些工具助手等。  m/ c: Q2 B0 [( l$ D5 g( n
0 }3 N' B6 D2 y  o( V, p, Y
& v. T  f' @+ }! n
1.png
! R. n2 j+ ?- j% i
▲ 图 1 Baremetal 开发包源码框架; I# U/ y4 [+ b4 ^  J4 z# G. O
/ D3 D5 i: @1 d" M  `/ O

8 N' T! Q$ [# W8 |2 Q2.2.2. 源码目录结构
1 Y2 {$ O. R5 l 2.png
" M) l; M4 A3 a5 P" ~▲ 图 2 Baremetal 开发包源码目录9 F4 R) ~+ J* ~7 O" |, O3 x
$ A1 N& I8 @1 b; h2 \
2.2.3. 开发包支持模块列表3 |7 q9 I6 M1 D+ j3 K0 f( E5 t5 z  C) C
已支持的 HAL drivers :9 U' v/ g7 P; T  ?7 v3 K9 R9 w
• 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, USB
- w2 }& H! k% L; M8 o5 X: p) @1 ~/ F# I5 w% R
已支持的 LL drivers :
- {" S' G/ H1 e7 N: a  N6 B9 t& h• ADC, DMA/DMAMUX, EXTI, ETZPC, GPIO, I2C, LPTIM, MDMA, PWR, RCC & BUS, RTC, SPI, TIM, USART: T9 J/ w! k7 C/ x" z9 l

- L: m0 t& D2 O* F% Z' ~
BSP 与 BSP 组件:! u' X2 s. k: e+ `8 v
• 基于 HAL 封装了更高一级的 API,为 LED、按钮、相机、LCD、SD 卡和 COM 端口提供 API,包含了以下一些外围器件的驱动:GC2145, LAN8742, MCP23x17, RK043FN48H, STMIPID02
6 v3 g8 u4 R0 G; g! _; V! X) b- r* w
中间件程序:
+ J# K. R* j; U% T" R3 ^- Z% j• 包含一系列支持某种服务的库文件及接口文件,目前已支持:Eclipse ThreadX(原 AzureRTOS),STM32_USB_Device_Library,: F/ x7 L0 M) [
STM32_USB_Host_Library- a! J6 i. F/ \6 \  y
% x0 C" ]3 \6 B; v) F
项目工程:
* A2 `! w- F5 e0 i- H* c6 |• Examples:基于 HAL 接口的简单示例,没有中间件功能。
( e1 Z: t9 X$ |) I  D/ {• Applications:较完整的工程应用实例,包含中间件功能。6 G6 S7 E" Q& \) l; {
• External_Loader: 烧录镜像及从外部存储器启动的应用示例。
0 e& R$ U# E" C( m5 E' ?' x3 Q$ ~1 [• Template: 板级工程应用框架。
! m2 ]6 b. b! V- ?6 I/ A: u/ [3 E5 C: G  ^* G7 M
实用工具:( q. P* M* O! t0 b
• Imageheader:用于添加 stm32 头,支持存储设备启动。
1 ~1 I2 k7 B: E# K" Y2 y• Fonts:提供了一组用于显示的标准字体,包括 font8,font12,font16,font20,font244 W( D0 }" d* J* P8 A/ d% k1 d! J4 q
) O  }3 g* A/ z$ S3 v) g

' v$ y9 M6 s) u03 STM32MP13x 工程的创建2 w7 N" j! S) V  d! A
STM32MP13x 工程创建,可通过以下两种方式:
6 Q2 E1 f: K* {2 N1. 使用 STM32CubeMx 配置并生成项目框架代码,并基于该框架代码开发应用。
- H4 H, A1 Q4 W' b) A1 W2. 导入 STM32CubeMP13 开发包示例工程代码,并基于该示例代码开发应用。
; t. r: T% V4 P* Q& g* ]
! K, v) z9 d' V3 @' v! N  D3.1. 从 STM32CubeMX 创建工程
5 \9 |1 u6 x+ m2 ]" _2 N; ~3 \STM32CubeMX 是 STM32Cube 工具家族中的一员,它采用简单易用的图形界面,可以帮助开发者快速配置硬件和软件。可支持从 MCU/MPU 选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置等,并可生成适用的 C 代码项目。
$ L. q1 Q! o8 u9 C$ d; t& G- a0 k0 |% m- r9 w( G
本章节简述如何通过 STM32CubeMx 生成适用于 STM32MP13x 的裸跑应用框架。使用该方式无需提前下载 STM32CubeMP13 开发包,STM32CubeMx 可自动联网下载。
. b! K; ~' _0 i1. 打开 STM32CubeMX,点击 ACCESS TO MCU SELECTOR,
. j4 T* l6 H. h4 w* g2. 在搜索框中输入 STM32MP13 相应料号,如:STM32MP135FAF7,双击打开配置窗口, u& T! C' C: z: H9 Y& j
3. 弹框选择 MP13 Bare Metal,将生成 bare metal 工程框架。
9 [9 q6 }) p! ?1 H; ^( t 3.png ( }0 \5 t1 J) f7 D

& R# w2 @, u7 D9 _4 I5 A▲ 图 3 STM32CubeMx 选择器件1 m2 a7 y$ e- D! C7 h+ q+ s
4.png
4 V+ H: Q# i8 L6 [8 W$ g
% h/ ]2 Z6 W% z' _( n
▲ 图 4 STM32CubeMx 选择工程类型
3 l5 `0 L: g- ]$ }
( u. _2 t$ n' Y% {1 L

* q5 A3 @% K( S7 t0 d0 ?4. 切换到 Project Manager 标签页,输入工程名称。5 h8 Y$ [8 ]( X: y8 F/ t
5. 在此页进行项目选项配置,可保持默认。9 {2 f4 W6 n1 W5 [2 F! p
5.png / c6 M9 E, H% e7 [# E

2 l/ E$ P; T5 J& r/ G6 M/ I1 \▲ 图 5 STM32CubeMx 工程设置页面
6 y# C7 z' h: m7 w5 j5 c1 Y- L7 z9 h* E( y* d' g

% k0 O1 ]; s5 _: M* j- k, L1 s6. 回到 Pinout & Configuration 标签页。; O  g4 \- v' r, v3 t+ U
7. 使能 RCC 和 DDR。6 _+ c0 B6 k( C7 j: @% g) H  U
8. 配置各外设总线,配置方法与其他 STM32 MCU 相同(也可参考 Help -> Docs & Resources)
# T, b2 c5 g& |. T! L
. W& K- X! ]6 E7 b  e
/ y6 Q' X! x" Y& D' y4 [' B4 B

- `% a7 K* W6 {/ s 6.png 6 p. K5 r1 W, W$ b) R2 {
# w0 d4 R1 O8 ?/ \4 F7 O7 N
▲ 图 6 STM32CubeMx 外设配置页面. q' m+ G. }; v8 T6 K" w
2 n) K$ X6 N, q( r
3 v* A: n7 A& B# s
9. 切换到 Clock Configuration 标签页。% a  j6 m8 B4 z6 s) c" O! i
10. 若软件报告时钟错误,可点击 Yes 自动修复。
3 r+ O0 K  t! y2 M' P8 o11. 输入 CPU、DDR、总线等的工作频率,系统会自动匹配合适参数。
/ s2 \1 Y' v0 r/ c. L2 ?( b7 X% E5 P2 @6 }: F, G/ c
7.png 0 w1 F7 @1 K' N5 F
▲ 图 7 STM32CubeMx 时钟配置页面' e! c7 Y. E4 A, E( p" R1 }5 n
+ _+ U, V: {4 Y$ ]

% h0 _0 {. Y8 y8 U9 [1 `8 U2 r12. 所有外设配置完成,即可点击 GENERATE CODE,开始生成工程代码。0 X% [$ ]2 w0 o4 p! J" d
13. 若第一次使用,软件将提示是否下载 STM32CubeMP13 开发包,可点击“yes”,软件自动联网下载前述 STM32CubeMP13 开发包。
0 v* q0 O- [+ q- I14. 生成完成后,可直接点击 Open Project,将打开 STM32CubeIDE 工程。, z2 n* M, W$ P, P5 A: C
8.png 8 D: _1 p7 R0 T+ t2 y: W

$ N) J" ~5 H) F2 @" d; J' `1 X7 G▲ 图 8 STM32CubeMx 代码生成页面
, W0 G7 v8 ?  n, O 9.png % @% j; a3 ]; V1 j. F, q
▲ 图 9 STM32CubeMx 完成代码生成页面% `/ i% n' P( ]; O9 E# h
10.png
% z1 g4 m7 P# G
▲ 图 10 STM32CubeMx 生成工程代码示例
# v) l% q1 L7 i3 m+ C' h; h1 n! Y  u& }+ a3 ~2 m
15. 至此,工程框架已生成,可通过 STM32CubeIDE 进行用户代码的编辑、编译、调试。3 q* e* w- ]" g+ ~

$ Y9 g) G$ n& n4 R9 Y

. t! [9 v6 P5 r& }5 J3 u* v3.2. 从 STM32CubeMP13 开发包导入工程
& S" E- C2 B9 a0 n若已事先通过 ST 官方网站或 Github 下载了 STM32CubeMP13 软件开发包,也可导入开发包中的工程示例代码,从示例代码开始进行项目开发。6 S, i1 _8 k1 [8 A, T6 C; {

$ l/ F' u% G" H
这里以 FSBLA_Sdmmc1 工程为例。
% ?' {8 D+ `  g0 s4 l+ S, `项目路径:\Projects\STM32MP135C-DK\Applications\FSBLA\FSBLA_Sdmmc1
; k" b2 U$ {9 t6 j. G$ X8 q/ E1. 打开 STM32CubeIDE,导入 project! r' E9 ~4 i) |) Z4 Z
2. 点击 Files -> Import…$ W! ^' o+ C3 Q! h" I
11.png
5 F! g. K, J* K0 i% F) m! l$ Z
▲ 图 11 STM32CubeIDE 右键项目菜单
* R3 x- [8 r. f. Q& B7 ^! _5 {$ c  M

4 w9 e) b+ A% J' Z% O, }3. 选择 Existing Projects into Workspace! z: s* B" J; ?* s/ \3 A
4. 点击 Next>5 |* B1 s( V4 C  x2 B
12.png
: I) N" h( E8 D0 {
9 b/ R( u9 g! q. `/ O4 G
▲ 图 12 STM32CubeIDE 导入已存在项目
% Y& }+ J3 c$ C8 J4 ]; A4 k. e2 K# C6 q
1 [9 o! W7 h- y
5.点击 Browse…,找到目录 \Projects\STM32MP135C-DK\Applications\FSBLA; Z  W2 ^! U0 Y/ x
6. 选中 FSBLA_Sdmmc1_A7 工程
, I  `/ }0 R9 U" i3 E* A0 f7. 点击 Finish,导入 Project4 ?  a; D9 A; k% r
13.png
. M  J  I1 G: ]8 [

  D  [4 }+ M3 s- F) b4 Z▲ 图 13 STM32CubeIDE 选择导入项目; d7 {' t- S) G# b
9 _* [: J0 V3 _6 E
3 ]5 [) E3 M' T/ t
8. 工程导入完成。+ z5 {0 U7 O0 w4 H* Z
6 o6 h3 }3 R& }6 @( o( w' f
9 C2 c) M3 E& B) _5 c' L7 f
04 STM32MP13x 工程的在线调试0 n( w  Q1 Z# L: W
工程创建完成后,接下来本章节将介绍如何基于 STM32CubeIDE 进行工程编译及在线调试。' U4 n7 G& x& S# ]6 ^5 h

+ Y) C" S! |) o, b- n
STM32MP135 内部包含 128KByte SYSRAM,若代码小于 128KByte,可直接运行于内部SYSRAM 中,适用于验证一些简单的外设实例。若代码大于 128KByte,则需要将程序运行于DDR 中。下面将分别阐述。
! Y" r( i/ k7 [
* ~% t7 O, S- p4 L
4.1. 在 SYSRAM 中调试程序
4 r/ j. V  D5 c/ I8 X! `- ]( I仍以前述导入的 FSBLA_Sdmmc1_A7 工程为例。0 r) M- }. B7 k% O1 g5 H" I
1. 首先,将开发板切换到工程模式
/ W5 ?) E/ o  a+ H( D0 b2. 连接 Type-C 电源3. 连接 MicroUSB,这里板载已支持 ST-Link
( X8 F6 e6 r! v% l# O$ \+ N 14.png
& t+ q9 m2 k: q- U5 n
; W; R4 p3 \( {/ N& L
▲ 图 14 开发板切换工程模式
2 _  S. L2 s4 u6 X  q" M
! t5 W* l; ^9 w4 g
4. 右键项目工程名称,选择 Build Project,完成编译。% n) C! q5 @4 Z9 x+ I2 ~
15.png
% K1 e& i( {$ I: u
/ M9 v! H7 \1 \4 X- `
▲ 图 15 选择编译工程
0 G  N( w/ ~$ g' x" F; g& p+ O; D$ x( p/ u& a* l
6 D- `3 Z4 q! e" ]* U# L7 H
5. 右键工程名称,选择 Debug As -> STM32 C/C++ Application
2 ]( H7 ?  h$ v 16.png 0 a* u" m9 ?- F: N  _+ p. T
# T4 n2 q+ R! P* P6 p* D' E
▲ 图 16 选择调试项目方法 1
% K& s  u) U5 L* t( o6. 或点击 Debug 图标) K9 x* {; q. U: `. k
7. 进入 Debug Configurations….3 m2 p. B) S, k" y5 `" h/ n
17.png
2 F2 g4 u7 r! X! V+ i
! @0 H2 ^( [2 t
▲图 17 选择调试项目方法 20 h" n5 @5 t. }" }, b

" C6 [1 w* \9 t* [: B& ]
3 ^5 J7 O8 }6 a
8. 进入调试配置菜单
# ~1 B# W3 S' a& U0 [7 o0 y( h8 u! Z; D 18.png
. C6 [3 `- H& y& N) D! [0 I
! J" ~4 ]* n$ Z/ w
▲图 18 调试配置页面/ v/ ?) {2 l( w& x; U9 z

% R4 ~9 k5 D2 h7 z) v
+ ?$ G; ^, F% f9 R/ ]
19.png
& d- U; @, z" m, M0 ^, V

+ F9 G& {0 T8 [# P7 |* z: K  m& [" S3 l: Q( C. C" z8 Z" w
; P+ j, \2 y! ~5 R
9. 即可像 MCU 一样调试您的代码。
% t- s- N: N7 }, f9 Y) k! K 20.png
1 A, r8 m3 X+ L# Z/ z) k* F

# a% y  _9 J; K▲图 19 项目调试窗口8 \. B2 X7 Z6 l2 K- h8 X0 n$ W
6 ?5 I& [6 G' W/ V8 I) h
4.2. 在 DDR 中调试程序
: K+ N, |1 O% C3 s4 ~, o当代码量超过 SYSRAM(128KB)的大小时,需要将程序运行在 DDR。这里以 BSP_BasicTemplates 工程为例展示如何开发运行于 DDR 的用户程序、
/ b4 e8 J6 L7 N2 X# I8 z( t9 X) q* F9 \: v3 G! g+ I
1. 首先,按照前述方法导入项目工程; p& C* u1 r& s0 l$ K
21.png
( F$ {) K: B! h) U2 }# l* n7 Z3 M
& v  ?; i  q6 L- b1 _% U
▲图 20 导入 Templates 工程% t) O. D" w7 j8 Q, s
2 ^* Z* Z1 |( F: P! e* ?

+ C/ Q* T+ z& N7 r5 d# ?2. 打开 C/C++ Build 配置
6 c0 S# J- _, t9 V* L9 K3. 在 Preprocessor 中添加 USE_DDR 宏定义
8 ~3 a7 D  B$ J5 D1 n1 v4 Y 22.png + X5 ~+ ^5 k2 V! A# g: ?& b6 R' p9 F
& T6 \4 r1 P# {5 ~
▲图 21 使能 DDR 宏3 L$ F' f$ d0 @/ A6 I/ a* A$ `

- k: D. @# D6 _, [, L$ k
- v, V8 O: f4 n* _6 T+ R
4. 修改链接文件,重命名为 “stm32mp13xx_a7_ddr.ld”
& K7 a4 ~! w  A5. 修改 REGION_ALIAS 定义到 DDR 区域:
; }" Q/ m: n9 v# t+ }: o6. 重新编译后,目标文件将链接到 DDR
, z! A0 w3 z/ \+ ?0 w 23.png
0 s" h4 h3 h& F0 U

+ P" [( V8 G2 n! r. }5 o& o6 ?! ?▲图 22 修改链接空间& T4 M& c& E: Q
24.png 2 m; \, N: K# }

) k/ R. J; }+ j% ~▲图 23 选择链接文件
4 I8 h" |2 s) I% w! y
2 ?  Y# l  N; y8 F+ s
7. 在调试之前需要先运行 DDR_Init 对 DDR 进行初始化, u( G$ ?& o9 M( c. c" P  b$ ?
8. 按照前述方法导入 DDR_Init 工程,编译后全速运行一次,并保持开发板不掉电项目路径:\STM32MP135C-DK\Examples\DDR\DDR_Init, w. a/ F+ l6 B6 a' O+ m
25.png + V9 g" I: `' I7 s& R$ X7 t

% m% _5 G5 s- D  n) O# W4 H/ O▲ 图 24 运行 DDR 初始化
, D4 X- r8 B# {
$ r/ _. d; H$ \3 O, u+ h" S

9 T: V8 z, D  Y  f4 q2 K  g" y9. 回到 BSP_BasicTemplates 工程。
2 R9 R  K/ W+ _2 }  b# {3 ?10. 在 Debug configuration 对话框中,将 Startup 页面的 monitor reset 删除。
8 j& K+ F5 x' p0 a: h! D9 K" G) p 26.png
  \4 j) F4 i0 }% n/ M. c7 E3 }7 ?

4 e1 H( t5 Y+ ]+ M▲ 图 25 修改调试参数* f' }- |) x4 J5 S5 r( U

7 A% X+ U9 M: F1 d; o$ k+ F4 |4 q! m
% H+ T( h. _0 S9 W6 b. p! ?
11. 点击 Debug 进入调试4 |5 A( B/ e& \0 h4 P
12. 可以看到当前 main 函数的地址已经为 0xC000 开头的 DDR 位置& Z7 }. G! D, U$ N
2 v, {" @- R7 V# N* _; C
" p; E; o) W/ t, I( ^
27.png 6 [1 t5 r. U) A+ g/ m

; [! T" H& A' X9 _' q. B▲ 图 26 在 DDR 中调试工程" j& o6 c( q& L

4 n% z4 Q: c5 `( `# |

1 j, C9 R9 T# }) t05 从外部 Flash 启动7 o; |1 ~2 e$ y/ P1 I9 j
28.png
- [" w7 r/ Q  x+ g5 t, C" ~5 b

% y  f3 A6 D& _& z▲ 图 27 STM32MP13 启动流程
. ~. |3 W7 N9 x$ L3 [& a* v% z0 {0 d2 v, W
从外部 flash 引导 STM32MP13, 一般需要包含两个部分源码。如上图所示,芯片上电后,首先运行内部固化的一段 ROM CODE,ROM CODE 从用户配置的启动器件中寻找 FSBLA,并将其拷贝至 SYSRAM 中,FSBLA 运行后,执行 DDR 初始化及用户代码(CUBE EXAMPLE)拷贝到 DDR 中,最终实现跳转到 DDR 中运行用户程序的目的。2 q/ x  W& J% E5 t

: o- A* p' p( D) I2 ?
这里以 SDCard 启动为例,在第三章节中,我们编译调试的 FSBLA_Sdmmc1_A7 工程,即实现了 FSBLA 部分的功能,BSP_BasicTemplates 工程为实际开发的用户项目。完成启动需要将这两个工程生成的镜像文件都烧录到 SDCard 中。: f. E, T& l# B# \

3 j1 k6 p" R, ?( \3 J1 }* v: A
• FSBLA 需烧录到 SDCard 的固定位置 LBA128 或 LBA640,ROM CODE 固定从这两个位置寻找 FSBLA。
+ z, @/ w4 [( I, J8 E( q. e• CUBE EXAMPLE 的存放位置可在 FSBLA 程序中修改,默认为 SDCard 的 LBA640。
" K' i: D! Z! H: R+ A• 如果有烧录过 OpenSTLinux 的卡,需先格式化。原因是 ROM Code 优先从 GPT 分区表中寻找 FSBLA,若分区表存在,新烧录到 LBA128 位置的 FSBLA 将会被忽略。
- F$ w: K$ F3 R& g! o 29.png : a3 P2 m2 z- U$ O
▲ 图 28 镜像在 SDCard 中的 Layout
) A8 g- z; H3 D
/ Y5 |% o3 t9 N& s( G+ G7 Y  ~% }
需要注意的是,FSBLA 和 CUBE EXAMPLE 都需要加入 STM32 Header,才能被系统识别。STM32 Header 是 ROM CODE 加载二进制文件的必要格式,每一个被 ROM CODE 加载的二进制文件都需要在头部添加特定的 STM32 Header。STM32CubeMP13 开发包中提供了ImageHeader 工具,用于为项目二进制文件添加 STM32 Header。开发者不需要深究 STM32Header 的详细内容。
& N. b2 b2 I8 s; ^ 30.png
, d# J, u* h8 L) k$ |
▲ 图 29 STM32 Header 信息
) t/ e& V. B. k! Q4 b7 k
% \" w: m7 e$ `
为用户程序加入 STM32 Header,可在工程配置的 post-build steps 中加入如下命令:3 p  s, @) L7 k1 }0 d
“(path_to_STM32CubeMP13
: \- e- U" Y& f5 I* FPackage)/Utilities/ImageHeader/postbuild_STM32MP13.sh"# r( U' \  v1 _2 h! m
"${gnu_tools_for_stm32_compiler_path}"
& H% K& P5 m" O# B3 i"${BuildArtifactFileBaseName}"
4 p6 ]+ v) K1 N% `- }6 \1 ^% l- o& R8 v3 K
4 V/ I0 |$ U- b1 q3 X* M6 a
重新编译完成后,即可生成打上 STM32 Header 的目标文件。) e3 g' Z% |0 m3 X& {5 F8 L/ \1 o  k+ g
31.png
0 @4 c9 n  v( C. h
▲ 图 30 添加 Post-build 命令' B& l3 E9 d8 g
; }( C+ n8 l2 z3 {: z( M
注:path_to_STM32CubeMP13 Package 为 STM32CubeMP13 开发包的存放路径。
9 D( l- A5 ?8 f7 T2 r# {7 Y6 C0 N, e9 `/ ~- m+ \1 m; ^# h' K
至此,已准备好待烧入 SDCard 的目标文件:
) F1 H, h( Z* o$ r1. 已添加 STM32 Header 的 FSBLA_Sdmmc 目标文件:FSBLA_Sdmmc1_A7_Signed.bin (即 FSBL)" N" e2 U2 ?5 t# H! O8 w
2. 已添加 STM32 Header 的 CUBE EXAMPLE 目标文件:MP13_BSP_BasicTemplates.stm32(即用户工程)
! q8 u  D( P# W0 w. h; w
0 P) _$ x8 p; r. A/ N  i/ L+ ^
烧录工程位于 STM32CubeMP13 开发包的如下目录:
; @. h. v. `& C# \- g2 Z\Projects\STM32MP135C-DK\External_Loader,以二进制的方式提供了烧录时需要的两个引导文件,包括:5 W9 i6 ?  \" D( r2 k; d% Q- t
1.STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32. K6 `* I0 q* r; u- @( o
2.SD_Ext_Loader.bin其中,STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32 为基于开源工程。% \+ x7 _& V( a. E! m
4 n4 Q; I* d3 Z3 K1 M; C% f

+ l7 H- R; h& C7 a  A9 C4 p: }7 u; zOpenbootloader 实现的一套 IAP 应用,执行烧录流程管理。SD_Ext_Loader.bin 工程执行SDCard 设备的实际擦写操作。
2 Q5 T  I2 L' o2 J6 o
2 H8 L) i9 r) c# w# u% o7 C

( V0 }6 U1 w7 e5 k目前,引导设备可支持 SDCard,QSPI NOR FLASH、EMMC 等,若项目开发中需要修改适配不同的存储设备,可联系 ST 窗口获取烧录工程源码。) A/ J) O8 n  m/ W

! i! _' D% Q: H  A
将需要烧录的两个文件拷贝到 External_Loader 目录下,与烧录工程的两个文件存放在相同位置,然后修改 tsv 文件。完成后,目录中文件列表和 tsv 文件内容如图所示。8 g. E6 V; H2 u4 v. y, p/ ]6 b
32.png
: m6 w( D$ J) j( J9 I, `2 Q, r
▲ 图 31 烧录文件列表% c0 J+ r( {2 l  p7 H3 l5 V
33.png * |) }$ C6 s$ N1 R' W) ?) n+ |* C
▲ 图 32 tsv 文件内容2 M: Y& F) y3 s, L5 T5 u* O" Z

1 f# x, q9 g& ~* O( P* y1 H  k
( g- A2 Q' Z+ \8 {( G& z
接下来,即可使用 STM32CubeProg 进行镜像烧录。可支持通过 USB 或 UART 连接,不支持通过 ST-LINK 连接。这里以 UART 连接为例:
) X  d4 R' D8 x" t. ]1. 开发板跳线设置到 000 并上电
- U7 O: I! M8 O- c$ R2. 连接 MicroUSB 口,查看 COM 号。注意通过串口连接时需要断开 USB OTG. i/ q/ f2 c1 ^$ {+ k
3. STM32CubeProgrammer 选择连接方式为 UART,选择相应 COM 口3 \8 {9 H7 L& P; ~6 _  q
4. 点击 Connect 连接
8 z, z3 Z4 R) i 34.png
0 D- j/ H5 ^' R9 K+ K8 O
  M0 c* ~( d- ~, |. z! p 35.png 1 {( y1 h6 k# @: }. O' w
5. 点击 Open File,选择 FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件
( i# E# E7 H. M5 b: o6. 点击 Browse,选择目标文件夹:\Projects\STM32MP135C DK\External_Loader\SD_Ext_Loader/ z6 Z4 b: s" c+ j8 _) o3 a' p
7. 点击 Download,开始下载镜像
6 P' U! h$ d$ U6 _' z" o 36.png
2 S/ A7 f/ @) @" @& J& R
0 i7 D5 n9 V# `
37.png * P' {0 b' c3 H" D! j# ]

  C7 |& o9 O0 q2 Z8. 等待烧录完成
& a7 P# O  i% ~+ T8 v$ C0 T9. 将板子断电,boot mode 切换至 SDCard 启动) \- G+ a8 @  G# u
10. 重新上电,即可引导启动) k6 _6 i/ l  K. d
38.png
1 `; K  ]( X  C  @% a8 J/ L) r' o) A; N: R" e
转载自:STM32
* F0 t7 R* ]/ {$ y% A* r3 y# E' T3 F- U- \

) D6 @' J9 O* A
赞 收藏 评论0 发布时间:2024-11-22 19:09

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版