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

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

[复制链接]
STMCU小助手 发布时间:2024-11-22 19:09
01 引言
# h8 \9 T6 v1 e- T4 USTM32MP13x 系列 MPU 是 STM32 Arm®Cortex® MPU 家族中的一部分,它拥有单核Cortex®-A7 核心,支持核心频率 650MHz~1GHz,不仅能够轻松运行 Linux 操作系统,还同时提供官方 HAL 库,用于支持基于 RTOS 或无 OS 的项目方案,即裸跑应用程序。
' i# h, h. R5 r# m
: `7 Y2 y9 c2 `9 k7 o" f5 x6 s- F
本应用文档将就以下几个部分简述如何在 STM32MP13 系列 MPU 上开始无 OS 项目的开发:) j' l  t. z8 u, i- c7 D2 V
• STM32MP13x Baremetal 开发环境简介
" M. d7 r' n( p# a* o/ i* h• STM32MP13x 工程的创建
7 p: Q5 i" p. M3 \1 Z/ E9 U5 I  O• STM32MP13x 工程的在线调试+ J9 |  k! x5 V) i6 p% A
• 镜像烧录及从外部 Flash 启动9 E% H) g( n$ J. J& Z. n
# |% `+ O! P6 p: \  i
02 STM32MP13x Baremetal 开发环境简介& W, w' a- L+ e* a4 F% q. Q) P% x/ p) p
2.1 开发工具及环境
+ X1 I% q6 \( dSTM32MP13x Baremetal 开发工具主要包括:
% B3 o; ^( @! Z- N1. 烧录工具:STM32CubeProg ( 版本大于 v2.15.0)
8 o' O" z! V5 l( R. C. E$ {2. 配置工具:STM32CubeMX (版本大于 v6.10.0)+ j3 @; b6 y( Z# M  V
3. 开发调试工具:IAR(版本大于 v9.50),或 STM32CubeIDE(版本大于 v1.14)9 t, z: N7 s! h' p
本文示例基于 STM32CubeIDE 开发调试工具。( e' w$ A. k8 ~
3 ]' w5 s* g% F4 o: m+ A
4 ?' h! {  l7 u* l- D
2.2 STM32CubeMP13 开发包
' E0 j. W! G3 W1 ]. tSTM32CubeMP13 开发包同步发布于 ST 官网 www.st.com 和 github.com,可通过如下方式下载:+ j* u; x9 m" ^4 ?8 P9 I
1. ST 官网下载链接
/ z6 y5 z: J) G4 v2 b" Z+ Y' D3 E2. Github 仓库链接9 |  Q' R: Z6 [$ L& P% \
3. 通过 STM32CubeMx 软件下载2 H( n. r# q) A- Q$ c$ j. d

0 Q; t3 N9 p. F* M
2.2.1. STM32CubeMP13 开发包总览% o6 C$ C4 l1 r( B: W
STM32CubeMP13 开发包运行在 Arm® Cortex®-A7 处理器上,由以下三部分组成:
$ R% H0 U% w0 d. J5 S8 e• Level 0:驱动程序,包含 HAL、LL、BSP、CMSIS
* X* G8 y0 i" _3 }• Level 1:中间件,包含 Eclipse ThreadX(原 AzureRTOS),USB Host & Device 库$ k3 n  P' l. g7 U* G2 f6 H6 D5 M* E8 v
• Level 2:包含各种板级示例程序
% y+ z( d- U9 K) H除此之外,还包括一些工具助手等。! |  h. ~6 n0 g' w$ E- a& O, o, K3 D
: d) d1 {8 F* T  U! x: j2 ^
' Y; [( I" Q, X% ^, ~( G5 s
1.png
, ^; D/ W0 W! i% G1 c0 V
▲ 图 1 Baremetal 开发包源码框架
! w; O+ J# n' V  K' y; r7 h3 V9 z$ e+ y% G2 }" [  y. u0 r1 D6 \7 e
2 u. d( G/ f: s" w, m
2.2.2. 源码目录结构6 [/ _, `% B: q4 L4 k
2.png
' I3 K# `; I# m1 C  ]▲ 图 2 Baremetal 开发包源码目录
+ c. ^7 ]" ~# n
! s/ ~8 e4 Z2 V5 ?
2.2.3. 开发包支持模块列表
9 a1 b( Q1 N0 _! Y已支持的 HAL drivers :
1 Z7 C# m6 r. |5 a• 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
! Z6 x  q9 P5 I
/ L% c  ]  ~9 x* r! l
已支持的 LL drivers :" E$ Z: I* R, c9 c0 K3 n
• ADC, DMA/DMAMUX, EXTI, ETZPC, GPIO, I2C, LPTIM, MDMA, PWR, RCC & BUS, RTC, SPI, TIM, USART
' y5 k- a1 h; t# q( n! p, I: I/ B$ x/ D# Z4 [$ j& i1 B
BSP 与 BSP 组件:
* r( X  B! e6 k  T5 T1 x( p• 基于 HAL 封装了更高一级的 API,为 LED、按钮、相机、LCD、SD 卡和 COM 端口提供 API,包含了以下一些外围器件的驱动:GC2145, LAN8742, MCP23x17, RK043FN48H, STMIPID022 q9 ?0 N2 Q2 I1 D7 e% ^! R: ^4 K
  ?/ a2 Q7 J0 u% I- w( H# e! h
中间件程序:
* i! ?" ^& L0 `• 包含一系列支持某种服务的库文件及接口文件,目前已支持:Eclipse ThreadX(原 AzureRTOS),STM32_USB_Device_Library,( t1 W  o  I% T# ?* C
STM32_USB_Host_Library
. z+ N* m' r# z! h6 v7 [9 U1 Q! N- U6 Y( p0 U, ?, M
项目工程:# D- f2 u* [% z- r
• Examples:基于 HAL 接口的简单示例,没有中间件功能。6 B# O" W3 k+ t) z6 G: @: H0 t
• Applications:较完整的工程应用实例,包含中间件功能。
! h& c& Y; L5 V: \, X' v: o• External_Loader: 烧录镜像及从外部存储器启动的应用示例。
3 z# Z* \5 c( n• Template: 板级工程应用框架。
2 x0 K) W4 K8 F7 A4 g7 j
  y* ^0 T3 h  w  Q9 t) d# A
实用工具:7 ]0 O6 d, t( g- V% h# a8 l
• Imageheader:用于添加 stm32 头,支持存储设备启动。
+ S0 b) l# Q& h4 s• Fonts:提供了一组用于显示的标准字体,包括 font8,font12,font16,font20,font245 P, o4 l  E, i' V: J/ M
# S  F1 V- U6 C. `% k
9 b; g, j$ }$ n# _
03 STM32MP13x 工程的创建
  C# l8 d* b. q* D2 x, `STM32MP13x 工程创建,可通过以下两种方式:+ O9 i: x" ~3 |, R4 j; m. X
1. 使用 STM32CubeMx 配置并生成项目框架代码,并基于该框架代码开发应用。
0 H6 E. }) q- z1 F. B! G) L" |+ {2. 导入 STM32CubeMP13 开发包示例工程代码,并基于该示例代码开发应用。
* ?: H5 O* o  i. Y8 @) E) V3 [* c2 ?! j, z7 l. o
3.1. 从 STM32CubeMX 创建工程
0 o6 Q1 T! \- wSTM32CubeMX 是 STM32Cube 工具家族中的一员,它采用简单易用的图形界面,可以帮助开发者快速配置硬件和软件。可支持从 MCU/MPU 选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置等,并可生成适用的 C 代码项目。& D) f0 q# c: B4 L# c0 O2 s

' ^4 T2 O% X+ t" V, G# b5 N
本章节简述如何通过 STM32CubeMx 生成适用于 STM32MP13x 的裸跑应用框架。使用该方式无需提前下载 STM32CubeMP13 开发包,STM32CubeMx 可自动联网下载。$ i' p: \4 x0 w" |$ f& T
1. 打开 STM32CubeMX,点击 ACCESS TO MCU SELECTOR,
- T% ?: r1 l) y2. 在搜索框中输入 STM32MP13 相应料号,如:STM32MP135FAF7,双击打开配置窗口
# f- N* }! o* |0 N+ X3. 弹框选择 MP13 Bare Metal,将生成 bare metal 工程框架。
: v) x1 x0 H* _" ]& ?* R; F 3.png ) U: K7 R# {9 J$ j$ L

6 v/ _4 i( M* Q3 B▲ 图 3 STM32CubeMx 选择器件5 _" u8 o' t% z" ?% r
4.png
! Y. a  u, c; Y' l  K  Q& {

& ?, B  ]5 n5 I; J0 y▲ 图 4 STM32CubeMx 选择工程类型% U# f5 P+ p) {# z' a

, u7 a/ I) C: B( z8 k
( ^1 F. c  f" A/ D0 q" l% m2 A1 R- k
4. 切换到 Project Manager 标签页,输入工程名称。* A' D3 N" E4 c! o/ r8 Q! b/ y
5. 在此页进行项目选项配置,可保持默认。6 C' [9 ?, e; T" E* w
5.png
1 q% c+ j. x% p5 N
: }& C7 |; [) d( ~/ s5 w! o
▲ 图 5 STM32CubeMx 工程设置页面
! ~* C* M9 k+ k/ v, l
/ T/ x% {! e( B/ C1 n
, n% ]( W: H( E
6. 回到 Pinout & Configuration 标签页。& h& j7 i; T1 @
7. 使能 RCC 和 DDR。7 @8 ~/ d* T% I
8. 配置各外设总线,配置方法与其他 STM32 MCU 相同(也可参考 Help -> Docs & Resources)
6 g2 P. f, C8 _. f/ A7 w9 o7 ^% ~; Z

( y$ A5 d! b: q. V# l6 Y/ y

# p5 A, m/ D) ^; ]- a2 m( l+ ?! D1 n 6.png ; H9 |# _5 [0 e9 E3 p& A1 {
+ O0 X. Q! J7 m6 |" B9 B* W+ R5 x
▲ 图 6 STM32CubeMx 外设配置页面
2 [$ D9 Z9 l7 P. F
; u+ B( i6 E+ I/ o% J
9 c& |9 c# G: b% ?+ U( ?9 w2 N0 h
9. 切换到 Clock Configuration 标签页。; |2 B# D) a  k" l0 ^
10. 若软件报告时钟错误,可点击 Yes 自动修复。* d* \2 q# O% t! H0 ~1 p
11. 输入 CPU、DDR、总线等的工作频率,系统会自动匹配合适参数。. n4 g+ O2 ?8 r5 h0 ?
: Y$ H# H, _$ b0 e1 i* f) P
7.png ; q9 K$ g# P, s" [/ x; Q
▲ 图 7 STM32CubeMx 时钟配置页面& ?1 [8 y/ v0 G) N4 U/ E
+ n9 M1 @3 j7 L" Y/ ^- _. ]$ ]

5 O( [" y. ^+ ~9 k* f8 d. ~12. 所有外设配置完成,即可点击 GENERATE CODE,开始生成工程代码。
! K1 P. I! w4 n  |, X) U; K; r5 ^13. 若第一次使用,软件将提示是否下载 STM32CubeMP13 开发包,可点击“yes”,软件自动联网下载前述 STM32CubeMP13 开发包。
8 M( G/ q6 D4 W4 T: J/ P14. 生成完成后,可直接点击 Open Project,将打开 STM32CubeIDE 工程。7 c* y& h( X: ]/ x2 q
8.png 2 b" n7 R: J3 z/ Y, ^
! L1 t+ N9 ]3 C8 s2 \
▲ 图 8 STM32CubeMx 代码生成页面" g# u3 Y) M6 G  B
9.png
5 T7 K0 z" p5 H5 \5 a) @5 t
▲ 图 9 STM32CubeMx 完成代码生成页面
+ B; l9 x3 t' x" M& B. U 10.png
0 `' U6 x7 t2 z. ]5 z
▲ 图 10 STM32CubeMx 生成工程代码示例8 R' U; J: K- z. J8 F% n

, f7 {, F% c' A; _* f$ a
15. 至此,工程框架已生成,可通过 STM32CubeIDE 进行用户代码的编辑、编译、调试。3 U  b0 V4 @) a+ }& [7 g
, S1 a% D0 J7 O. v) q3 O* J* c2 H
3 @- t- A$ {; M
3.2. 从 STM32CubeMP13 开发包导入工程
9 S' z, H- F! ^* @+ h% F  \. ~若已事先通过 ST 官方网站或 Github 下载了 STM32CubeMP13 软件开发包,也可导入开发包中的工程示例代码,从示例代码开始进行项目开发。
3 h+ P' N' M( n9 J" ~. w: X4 ]7 y! U  [: i( c
这里以 FSBLA_Sdmmc1 工程为例。
0 H( t  c2 ~8 o' S: Z5 J项目路径:\Projects\STM32MP135C-DK\Applications\FSBLA\FSBLA_Sdmmc1, @) h* K! v5 ]. u- N
1. 打开 STM32CubeIDE,导入 project
& ?1 ~- z, [$ q- @- U+ k; O2. 点击 Files -> Import…
7 k5 H* @  w& p* k, w 11.png
; e" h# @3 c9 N* v% ~; {, b
▲ 图 11 STM32CubeIDE 右键项目菜单- x- I9 `" f8 [! W1 J7 M+ U

  v; ^$ A/ a" W
8 }/ A# M8 `! P9 V( b3 R2 M
3. 选择 Existing Projects into Workspace
) W/ Y/ |/ X5 n! ~4 b4. 点击 Next>, V: ^# [3 @9 |) s% y, z+ A
12.png % ]' r: a& }# R& M3 N% [3 o
; `- g6 o- [) {5 e0 F& v* z( H
▲ 图 12 STM32CubeIDE 导入已存在项目5 y: H2 y; X4 I
- T. [8 `, n# O: ?
7 |! f* \0 Z/ k6 O
5.点击 Browse…,找到目录 \Projects\STM32MP135C-DK\Applications\FSBLA" r1 M. V0 x- T
6. 选中 FSBLA_Sdmmc1_A7 工程- H  H2 \$ [  u" ?$ S1 p6 R" M
7. 点击 Finish,导入 Project% t, m. q: Q( n$ R% d' Z* Z
13.png , @- ?. p; T9 M

' L" k! D  I/ t9 u  I# K▲ 图 13 STM32CubeIDE 选择导入项目$ k; u9 e" q( A: L. g/ w

" r( a0 R' i" i5 \6 B% z( N

4 K. T) Q6 v# l6 \( [; Z8. 工程导入完成。6 {: j# R% h, u' v. ^/ Z

6 z8 n! Q7 }1 @

! R( E5 e( K& ?. a04 STM32MP13x 工程的在线调试( _9 b/ {5 V( T; S2 L
工程创建完成后,接下来本章节将介绍如何基于 STM32CubeIDE 进行工程编译及在线调试。
# C6 ^) o( ?- L6 S+ h& p9 f$ s3 P! n/ J6 d
STM32MP135 内部包含 128KByte SYSRAM,若代码小于 128KByte,可直接运行于内部SYSRAM 中,适用于验证一些简单的外设实例。若代码大于 128KByte,则需要将程序运行于DDR 中。下面将分别阐述。
* @# d. q' l4 Z, F
- R, x$ a9 y+ k& r8 L( [7 M
4.1. 在 SYSRAM 中调试程序5 q+ L9 M% \) v% P! P; J
仍以前述导入的 FSBLA_Sdmmc1_A7 工程为例。
3 G* j) l$ H  A7 r8 n4 \1. 首先,将开发板切换到工程模式
, c7 V+ ~4 ]& t2. 连接 Type-C 电源3. 连接 MicroUSB,这里板载已支持 ST-Link0 g: B  |6 y- e: v, k& m
14.png
0 F1 d+ D# V0 a# L" |' v" ^, f4 h
# D  K( Y% [- X8 R' c: s
▲ 图 14 开发板切换工程模式
7 A* v, O' H# P+ i* o) ]3 x0 B: |- P5 j1 X  K; V! J
4. 右键项目工程名称,选择 Build Project,完成编译。  O0 T6 u& `1 Y8 [0 I. Z
15.png
) N6 {9 W& l3 D5 \/ Z# z
0 ~0 s9 ?2 G7 @7 p+ v+ b
▲ 图 15 选择编译工程
; k2 }% w" m. N8 R
1 d, k0 A% s. C, L4 B7 ?

9 `4 v$ ]5 e/ I* h! M0 c. Y1 t' ]5. 右键工程名称,选择 Debug As -> STM32 C/C++ Application3 \: H% c) e7 \7 x) H: W
16.png
" k( A2 D+ q7 h; j/ V2 X  |

* Q1 C! ^9 S4 `% z▲ 图 16 选择调试项目方法 1& _9 X6 o. k* z
6. 或点击 Debug 图标
# H9 Z6 j1 @# c% C5 J6 }7. 进入 Debug Configurations….
9 N5 }! }* U: e3 x( _5 a7 \/ z7 ?& g 17.png $ z% |" S) u! D2 I

" q. d! \# C( Q4 v1 w$ e9 Y% Q▲图 17 选择调试项目方法 2
$ C* W  {. @4 {0 b- {
9 W% O1 K6 ]! `" }

/ D( T' A) e# `# Q2 |8. 进入调试配置菜单7 d! F( [/ K/ N
18.png ; l7 ]4 z* W! |1 }$ w
4 c, m3 C. C0 V
▲图 18 调试配置页面! p% Y$ O% P- O& E
+ [( [0 Y. O; w! U/ ]/ J

, b/ L( r/ C0 V5 }9 \ 19.png + E' |6 g8 H5 n5 }% l
4 {8 ]+ `7 [% |

0 a( D& `3 o: P8 O9 F
7 ^3 Z& Q! x& x( W# b- t3 m0 G
9. 即可像 MCU 一样调试您的代码。
) r! ~% \$ u* K  z5 U  _1 x 20.png $ g3 i% A* p  U# d2 l' `
7 t; K) q- g* f3 f7 }& S' R
▲图 19 项目调试窗口( D" U7 F) W$ k
! E4 v& i5 y, o& |1 @
4.2. 在 DDR 中调试程序0 T( g: _1 \6 V. U+ G1 I7 W- P3 [) S
当代码量超过 SYSRAM(128KB)的大小时,需要将程序运行在 DDR。这里以 BSP_BasicTemplates 工程为例展示如何开发运行于 DDR 的用户程序、. {/ n! f/ F  c: U5 N, r

! V2 @' u) O6 N: n( G
1. 首先,按照前述方法导入项目工程
# D# c  ^& e7 [ 21.png ' U; h+ y4 |8 \6 ]' }: w

  T- z+ q! Y$ ]9 |$ I▲图 20 导入 Templates 工程
, W" f- R- b4 v# T6 b6 j3 @: z* @9 o+ O% z/ H6 G
# p, d4 ^; q7 V2 L. b2 w/ W
2. 打开 C/C++ Build 配置# _" S) e& V7 d/ ~$ c( j8 @  u
3. 在 Preprocessor 中添加 USE_DDR 宏定义
. c' {% a( e; l: N( _ 22.png / `/ e/ C/ F% m; y+ y7 F3 N3 Q: b* a
! l1 i9 g: D& |, A) a9 w% F
▲图 21 使能 DDR 宏/ G9 Z: K  X$ C) S6 l: o* F
0 ?% O( S1 D* H7 T' ?
& _2 z9 ^6 k) l' C$ O2 f
4. 修改链接文件,重命名为 “stm32mp13xx_a7_ddr.ld”
8 {, f! c; W7 ?# W* r5. 修改 REGION_ALIAS 定义到 DDR 区域:
( v: r3 L2 D- W# K# ~* s# W& E6. 重新编译后,目标文件将链接到 DDR. {# V. n/ Q4 f
23.png
0 }' m$ ^1 w+ l+ w; U3 j; w  h1 _

- t+ i9 b, k8 E! r0 K6 z& S▲图 22 修改链接空间2 z8 ~* K, z. G
24.png + Z3 b4 k, H/ I1 _" |; ]8 F$ F

4 N; H$ P# y8 G# p: q▲图 23 选择链接文件8 g' ]2 K# d  ?, i! [
; i0 c3 _# x$ C7 U- Z. k
7. 在调试之前需要先运行 DDR_Init 对 DDR 进行初始化
5 v2 b7 p  X1 ^  w) \8. 按照前述方法导入 DDR_Init 工程,编译后全速运行一次,并保持开发板不掉电项目路径:\STM32MP135C-DK\Examples\DDR\DDR_Init6 S. p9 X$ w1 Q8 R( f/ J; f
25.png 6 Y  ]% w, n2 A; q+ I
9 f( S' H5 V& B3 t
▲ 图 24 运行 DDR 初始化
# E* w& ~" L  x2 z& a) e2 A+ @4 |# T( h4 p4 t3 ]
3 ^! n! C5 c/ w5 r4 A/ G
9. 回到 BSP_BasicTemplates 工程。
0 W, q! Y! Y1 Y( F10. 在 Debug configuration 对话框中,将 Startup 页面的 monitor reset 删除。
0 b; F' e/ w9 |2 b 26.png
2 |0 r! B7 h# u. ]% T

- e6 V6 C) P7 Z5 z4 R$ u▲ 图 25 修改调试参数4 H1 R  s9 z0 W" M2 U7 H2 p

; C, y# U, D" F( G

. N/ N" k- u+ K* x0 j2 _11. 点击 Debug 进入调试0 c: V' t" H* F0 O
12. 可以看到当前 main 函数的地址已经为 0xC000 开头的 DDR 位置) L+ E% r, k' Z/ R
  S5 E  L. C* x1 I8 I  b: o; ~

) P8 K2 i8 U6 @( ? 27.png
/ Z) ~/ B! c( _' v5 F7 R) h, p4 f
7 c& `, J' |1 y, @& T4 s; O# I
▲ 图 26 在 DDR 中调试工程
5 z1 Q7 f5 A; ~7 l  S+ F: I0 L) R$ Q& p% _% O3 I0 i

$ p5 z" ~5 Q8 _7 N5 h5 y05 从外部 Flash 启动
8 N$ m$ a+ y) B) l3 B$ m7 Z 28.png $ d" P. o, ^3 a" X2 g
8 ~( e2 U( l/ l" V
▲ 图 27 STM32MP13 启动流程( S! ~1 T( x4 C3 f4 x, Y; A5 X

# n; J  {3 Y# y2 g% E
从外部 flash 引导 STM32MP13, 一般需要包含两个部分源码。如上图所示,芯片上电后,首先运行内部固化的一段 ROM CODE,ROM CODE 从用户配置的启动器件中寻找 FSBLA,并将其拷贝至 SYSRAM 中,FSBLA 运行后,执行 DDR 初始化及用户代码(CUBE EXAMPLE)拷贝到 DDR 中,最终实现跳转到 DDR 中运行用户程序的目的。
& @! i' Q+ b9 _  ~/ @1 d+ G
) \7 u& L! l$ h9 f" G. W. _  E
这里以 SDCard 启动为例,在第三章节中,我们编译调试的 FSBLA_Sdmmc1_A7 工程,即实现了 FSBLA 部分的功能,BSP_BasicTemplates 工程为实际开发的用户项目。完成启动需要将这两个工程生成的镜像文件都烧录到 SDCard 中。$ Y. L! M; B* ?* n
9 m: s9 R5 r) U, s
• FSBLA 需烧录到 SDCard 的固定位置 LBA128 或 LBA640,ROM CODE 固定从这两个位置寻找 FSBLA。8 G+ \2 L4 `3 g$ n: Q# a5 P
• CUBE EXAMPLE 的存放位置可在 FSBLA 程序中修改,默认为 SDCard 的 LBA640。
/ n: j+ Z7 s3 @: U, @& o- R• 如果有烧录过 OpenSTLinux 的卡,需先格式化。原因是 ROM Code 优先从 GPT 分区表中寻找 FSBLA,若分区表存在,新烧录到 LBA128 位置的 FSBLA 将会被忽略。+ L$ E$ T" A  C4 G
29.png - z1 c3 G7 S: s# h
▲ 图 28 镜像在 SDCard 中的 Layout, j  t# \& Y7 J

7 k9 a4 y' {+ d" c+ L/ S$ V6 f
需要注意的是,FSBLA 和 CUBE EXAMPLE 都需要加入 STM32 Header,才能被系统识别。STM32 Header 是 ROM CODE 加载二进制文件的必要格式,每一个被 ROM CODE 加载的二进制文件都需要在头部添加特定的 STM32 Header。STM32CubeMP13 开发包中提供了ImageHeader 工具,用于为项目二进制文件添加 STM32 Header。开发者不需要深究 STM32Header 的详细内容。
3 g3 v: g& J$ | 30.png   q- Z* o" T" Q6 R. z; D
▲ 图 29 STM32 Header 信息/ s# w. e) z+ C/ z

1 ]) M. `5 B$ U
为用户程序加入 STM32 Header,可在工程配置的 post-build steps 中加入如下命令:
* q2 j0 M$ o4 z* J“(path_to_STM32CubeMP13: E- ^; G0 L" @
Package)/Utilities/ImageHeader/postbuild_STM32MP13.sh"( E& _) G* G) z: j
"${gnu_tools_for_stm32_compiler_path}" & z# T6 [' |5 f) M+ r" A3 A
"${BuildArtifactFileBaseName}"4 U% @0 |- r1 A3 E$ [3 k

! L$ w' V( m% O
) I. x) t6 h+ F
重新编译完成后,即可生成打上 STM32 Header 的目标文件。
  ~& n* o- ~+ Q* w0 q8 m) N 31.png
0 M6 E9 I$ V9 M9 R$ O( r
▲ 图 30 添加 Post-build 命令0 U8 |2 @2 N% @; ~" R) h
) y) A, L9 k2 f( J
注:path_to_STM32CubeMP13 Package 为 STM32CubeMP13 开发包的存放路径。
. m: a( R% _4 P! o7 [# J8 e/ \' Q1 `+ ^% o- N- t
至此,已准备好待烧入 SDCard 的目标文件:2 u8 S* D% t4 ]9 S& f1 [: {
1. 已添加 STM32 Header 的 FSBLA_Sdmmc 目标文件:FSBLA_Sdmmc1_A7_Signed.bin (即 FSBL)2 `- F' x1 \, g2 \; s9 N# S# T
2. 已添加 STM32 Header 的 CUBE EXAMPLE 目标文件:MP13_BSP_BasicTemplates.stm32(即用户工程)2 S& h1 w/ m4 v3 ]5 O/ \
7 q3 P' g9 K" r6 w+ k
烧录工程位于 STM32CubeMP13 开发包的如下目录:
8 U3 @0 n, n4 L8 o& b5 Y\Projects\STM32MP135C-DK\External_Loader,以二进制的方式提供了烧录时需要的两个引导文件,包括:1 ^* d( q  y: v
1.STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32
! T: X7 b& O+ e9 [; t2.SD_Ext_Loader.bin其中,STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32 为基于开源工程。
7 x% f/ `7 {0 r7 A/ N# l
3 K$ W( S( a$ K9 s* e, Q

# h: \! R2 K" m* x" o0 HOpenbootloader 实现的一套 IAP 应用,执行烧录流程管理。SD_Ext_Loader.bin 工程执行SDCard 设备的实际擦写操作。
# `- u" o8 L) b7 O0 v+ l+ y; j1 N& e0 R7 B6 W  C
. W. n  f, {2 C+ X
目前,引导设备可支持 SDCard,QSPI NOR FLASH、EMMC 等,若项目开发中需要修改适配不同的存储设备,可联系 ST 窗口获取烧录工程源码。: ~% T) }- i  c) {; \. {) |5 ?7 S

: ?6 z+ h% ]4 N2 U( x& Z$ r
将需要烧录的两个文件拷贝到 External_Loader 目录下,与烧录工程的两个文件存放在相同位置,然后修改 tsv 文件。完成后,目录中文件列表和 tsv 文件内容如图所示。
6 Y9 h) `' I& }* x% R. q( J 32.png ( c& Y' q0 d( j/ u
▲ 图 31 烧录文件列表4 g' y7 x# B3 g: G5 o$ H
33.png
9 M/ F" c' i, ]& T% p) x
▲ 图 32 tsv 文件内容0 A1 `0 j( k, A, A8 w9 Q: X4 H4 P

" F! V* o9 n- i! r5 n

$ Z" U# t+ k. G/ h5 t5 D/ l) O) |( s接下来,即可使用 STM32CubeProg 进行镜像烧录。可支持通过 USB 或 UART 连接,不支持通过 ST-LINK 连接。这里以 UART 连接为例:+ L# d1 M" h( \6 A
1. 开发板跳线设置到 000 并上电$ N% ?1 Q' u1 d3 a' r( \2 {
2. 连接 MicroUSB 口,查看 COM 号。注意通过串口连接时需要断开 USB OTG- O* s% d' W  |- D* a
3. STM32CubeProgrammer 选择连接方式为 UART,选择相应 COM 口( Y3 E5 a- _" a% w& E) O; v4 Q9 ?( V) M
4. 点击 Connect 连接% k2 r$ i3 o$ f" s
34.png 7 J) R4 p3 O" U3 b/ q% h

) U9 L* [! M' {5 B 35.png
" ?* l* e- u  P( [/ U, ]; }) p0 t5. 点击 Open File,选择 FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件9 _3 s& M+ M: R$ z
6. 点击 Browse,选择目标文件夹:\Projects\STM32MP135C DK\External_Loader\SD_Ext_Loader" {! T8 }& F8 }( ?2 ^6 a: b0 B  K
7. 点击 Download,开始下载镜像
0 O6 H' j  a: v2 @9 o5 h+ Q7 N$ \' A 36.png
/ ^' B$ p; J7 J# s) V

5 j! R2 N, d) ^! L6 E7 O 37.png
: S1 e$ l+ E8 v2 T1 P5 E* F' v3 j
8. 等待烧录完成" L% `; U! n/ h; r. ]
9. 将板子断电,boot mode 切换至 SDCard 启动
8 _& c& Y3 U0 j10. 重新上电,即可引导启动
& j' k  a* G$ l9 a. Q 38.png 3 Z& t) h5 n* c& f0 V( _
0 S( U* e( B" d7 U$ A2 L
转载自:STM328 D) }% _! S8 M

) Q, S& K9 c& q# Q5 g. h7 v2 l' B; a) z1 I: ~
赞 收藏 评论0 发布时间:2024-11-22 19:09

举报

0个回答

所属标签

相似技术帖

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