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

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

[复制链接]
STMCU小助手 发布时间:2024-11-22 19:09
01 引言( ~: `9 s# ]! X1 F9 G
STM32MP13x 系列 MPU 是 STM32 Arm®Cortex® MPU 家族中的一部分,它拥有单核Cortex®-A7 核心,支持核心频率 650MHz~1GHz,不仅能够轻松运行 Linux 操作系统,还同时提供官方 HAL 库,用于支持基于 RTOS 或无 OS 的项目方案,即裸跑应用程序。) ?! K/ P$ A$ c& u! M

6 ]6 U2 z0 T7 Y$ P
本应用文档将就以下几个部分简述如何在 STM32MP13 系列 MPU 上开始无 OS 项目的开发:$ G# \+ i4 A9 v
• STM32MP13x Baremetal 开发环境简介- M% ^- N% S7 R$ [. t6 m5 G6 r
• STM32MP13x 工程的创建2 F$ M1 u8 D4 f) E
• STM32MP13x 工程的在线调试
3 x; b: O& v7 B0 x• 镜像烧录及从外部 Flash 启动
# p  d3 d. r5 `6 O
- y2 |& T6 Y. z  i
02 STM32MP13x Baremetal 开发环境简介% e# o6 w" {$ I$ N! E
2.1 开发工具及环境: [! z& U, s5 E1 L: C& L/ y
STM32MP13x Baremetal 开发工具主要包括:
1 q& b+ _2 \/ `1 Z/ E1. 烧录工具:STM32CubeProg ( 版本大于 v2.15.0). g8 V  h$ }- k: O9 w5 Z6 J5 R
2. 配置工具:STM32CubeMX (版本大于 v6.10.0)
( _$ {: V8 U& m. j0 f1 y2 Z% `3. 开发调试工具:IAR(版本大于 v9.50),或 STM32CubeIDE(版本大于 v1.14)
* x% A' r( W# X' Y0 i1 O! I本文示例基于 STM32CubeIDE 开发调试工具。0 D% @2 A6 X: K) h
$ T( E# E  M: }1 M- w3 q

: p! g. A" |- w+ N% D0 h. J  i2.2 STM32CubeMP13 开发包
& E  a$ D: l# O3 I+ FSTM32CubeMP13 开发包同步发布于 ST 官网 www.st.com 和 github.com,可通过如下方式下载:
6 y4 Z4 w4 {# _- [8 m) N1. ST 官网下载链接
, U7 |# Y. D0 q2 ~: i2. Github 仓库链接
+ O+ z) \# F9 n3 B. M! t3. 通过 STM32CubeMx 软件下载( t/ W. C+ e# m2 Z

! \: u, w4 y0 E5 W# v5 w
2.2.1. STM32CubeMP13 开发包总览
) @) S# p4 P) j% Z; MSTM32CubeMP13 开发包运行在 Arm® Cortex®-A7 处理器上,由以下三部分组成:+ B2 N! C- a; Q! k5 [" B* t! L
• Level 0:驱动程序,包含 HAL、LL、BSP、CMSIS+ _4 M6 J9 l; B8 N1 v- V0 q# t8 G
• Level 1:中间件,包含 Eclipse ThreadX(原 AzureRTOS),USB Host & Device 库6 V( e0 m2 D7 b4 F1 @0 |
• Level 2:包含各种板级示例程序% {+ s& U! k3 o' d$ u8 a
除此之外,还包括一些工具助手等。
; g# o. l, Z; t. m; ^  F( e3 ]! r) F. o. q6 w

% t! y. I4 K, i& a 1.png + [& h+ _1 z/ e# {( d. |5 f# v4 R
▲ 图 1 Baremetal 开发包源码框架
7 k* W& ?. o( u! W, [
# Z$ {- a" r" {( ^& H* w' f, e. n
" I* Y1 E3 g; d! T
2.2.2. 源码目录结构
$ n3 f0 _; w! C$ R# O 2.png % V  g# a5 R$ E1 l# w! w8 E
▲ 图 2 Baremetal 开发包源码目录
5 j) a0 C5 K: I1 {' o. n; F' w4 b9 l# w8 [3 G8 B6 F
2.2.3. 开发包支持模块列表
8 i+ a2 L+ Z' V8 x已支持的 HAL drivers :
  K; |6 L: J& z# H" L8 `: ~$ B, k• 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
+ q! b- U8 h" _! e
" G2 L6 O# j/ ~! Z; Y$ S
已支持的 LL drivers :$ ~* ^, q5 @0 m, _: U
• ADC, DMA/DMAMUX, EXTI, ETZPC, GPIO, I2C, LPTIM, MDMA, PWR, RCC & BUS, RTC, SPI, TIM, USART
6 {6 E% i5 Y% b& V6 M( s: V
1 h6 z. s* g+ q1 l
BSP 与 BSP 组件:
' u3 B, J* i; D$ S( |• 基于 HAL 封装了更高一级的 API,为 LED、按钮、相机、LCD、SD 卡和 COM 端口提供 API,包含了以下一些外围器件的驱动:GC2145, LAN8742, MCP23x17, RK043FN48H, STMIPID025 E8 S3 d9 X, N0 \& w7 j, G

! I6 K, l; L/ L3 I
中间件程序:8 ~/ T! e" I& R4 E$ i
• 包含一系列支持某种服务的库文件及接口文件,目前已支持:Eclipse ThreadX(原 AzureRTOS),STM32_USB_Device_Library,  `: V% F" C8 `
STM32_USB_Host_Library! a. J1 |1 _1 d4 H( O8 F
9 {" U# [7 G/ N! c$ K$ W5 A1 `
项目工程:. A7 B& q+ v( O- Q) f- q- L
• Examples:基于 HAL 接口的简单示例,没有中间件功能。
! N% @6 I3 V1 L3 G• Applications:较完整的工程应用实例,包含中间件功能。
1 l9 v2 F0 N, p6 t• External_Loader: 烧录镜像及从外部存储器启动的应用示例。, k5 \6 B4 w" Q  j! T' t+ K
• Template: 板级工程应用框架。" M( t0 l4 ~. {1 S& j8 {

5 M6 H" \/ d; Z" |$ E  ~
实用工具:
- ?; Q+ @  g5 q7 p* `1 x• Imageheader:用于添加 stm32 头,支持存储设备启动。' ~* G- Q2 _* K$ O
• Fonts:提供了一组用于显示的标准字体,包括 font8,font12,font16,font20,font247 R6 K, u& g0 Y; ]

' H) {8 r% X4 `/ q) X
* G7 I/ l+ G, y: [$ ~+ l- V  M
03 STM32MP13x 工程的创建( b; }' e4 Y6 w; ]) j/ _
STM32MP13x 工程创建,可通过以下两种方式:! H7 g) T5 l# Z2 c! ~2 z4 X# B) p
1. 使用 STM32CubeMx 配置并生成项目框架代码,并基于该框架代码开发应用。# r9 r6 e" l- @
2. 导入 STM32CubeMP13 开发包示例工程代码,并基于该示例代码开发应用。& B; e$ ^) e( z5 D  R; r
6 K+ z! s' M& U( w1 C( g6 l* g7 i
3.1. 从 STM32CubeMX 创建工程) m3 R+ a# e# C6 ^
STM32CubeMX 是 STM32Cube 工具家族中的一员,它采用简单易用的图形界面,可以帮助开发者快速配置硬件和软件。可支持从 MCU/MPU 选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置等,并可生成适用的 C 代码项目。+ G" C- @8 |. V/ g# C+ D

. C7 R8 c5 ~: g! b. v2 B
本章节简述如何通过 STM32CubeMx 生成适用于 STM32MP13x 的裸跑应用框架。使用该方式无需提前下载 STM32CubeMP13 开发包,STM32CubeMx 可自动联网下载。
% e+ }: U, E# ]1 L0 u7 [0 o( c1. 打开 STM32CubeMX,点击 ACCESS TO MCU SELECTOR,
: |* h! H3 h6 F- W8 \2. 在搜索框中输入 STM32MP13 相应料号,如:STM32MP135FAF7,双击打开配置窗口, c9 D) ]5 [3 Q9 m  c" Y
3. 弹框选择 MP13 Bare Metal,将生成 bare metal 工程框架。& ]' j  b% A7 O$ b
3.png   Z- Y4 ~& H1 Y% Z; e  R0 q
) G) k- Z+ B$ _1 p9 @
▲ 图 3 STM32CubeMx 选择器件# ?; z2 f6 {5 V
4.png , _4 _5 Q( q- k# ^+ v

( e$ }. p8 y/ f: T▲ 图 4 STM32CubeMx 选择工程类型; J3 P7 J6 f  }  o, |# s( ?' d
% Z9 x& ~- @& K

( _$ y( J" [8 i4 r' K4. 切换到 Project Manager 标签页,输入工程名称。
" E+ Q7 L( i1 K/ }5. 在此页进行项目选项配置,可保持默认。/ }$ c2 V4 ^5 _6 V4 `1 t+ O: S
5.png % v/ Z" y% j& V6 q, J
0 [* w" b1 K& r% w- b# U% [
▲ 图 5 STM32CubeMx 工程设置页面/ V, M% M+ Q1 s1 v

; X2 R! W  I: L: G' U

6 Z$ }+ w, x1 {6. 回到 Pinout & Configuration 标签页。
9 V" b' i1 S$ v4 \$ l% G+ w* [+ T7. 使能 RCC 和 DDR。5 {9 D7 I" ?( E/ [% T5 |4 w
8. 配置各外设总线,配置方法与其他 STM32 MCU 相同(也可参考 Help -> Docs & Resources)
$ E* @4 h$ w$ |. H
0 p6 ~) l5 K( D
- x7 c% A9 B# I. ?1 i1 l
5 b6 y8 I+ X- ~$ ~: s) g9 D$ f0 m$ M
6.png
2 W* g! A/ i0 S9 C0 X: Q

* ?: \8 W& \" g- E) l, C. d▲ 图 6 STM32CubeMx 外设配置页面
- k3 L1 `8 `4 k6 h
3 U  M0 Z: X* B* w) ^- w5 l6 C
& q7 K3 C  ?" d; r% e1 _1 G
9. 切换到 Clock Configuration 标签页。
& D+ k) i' Y9 y  W4 u10. 若软件报告时钟错误,可点击 Yes 自动修复。
* [  p7 n9 l' Z11. 输入 CPU、DDR、总线等的工作频率,系统会自动匹配合适参数。
9 R9 _, R: U2 O
9 ~$ M( t! u) k  z! O2 G- Z4 G
7.png
: q& ]2 h9 D2 B+ Z▲ 图 7 STM32CubeMx 时钟配置页面
: |* e; k2 l  N& x$ E& N5 Q' U: Q- x" i
9 I' O+ Y' }7 c
12. 所有外设配置完成,即可点击 GENERATE CODE,开始生成工程代码。% E3 L$ ~$ T( Z3 S" S
13. 若第一次使用,软件将提示是否下载 STM32CubeMP13 开发包,可点击“yes”,软件自动联网下载前述 STM32CubeMP13 开发包。' o/ }$ s/ U8 W
14. 生成完成后,可直接点击 Open Project,将打开 STM32CubeIDE 工程。
8 K! n2 \8 l' L+ N0 r. }9 i 8.png 7 ^2 u7 [: S) W: }1 _* A
5 w8 ^; K8 `. I  O% ?
▲ 图 8 STM32CubeMx 代码生成页面
1 d6 _/ f& `+ t 9.png
( P- T2 _8 d4 c/ d# F1 E& Q
▲ 图 9 STM32CubeMx 完成代码生成页面
5 ?  _8 U/ a" o/ l( Y 10.png
) E4 ^  g; c7 ?8 w
▲ 图 10 STM32CubeMx 生成工程代码示例
4 _* N3 m, y9 \! s" q" j0 n7 T5 \* ?- D- ]
15. 至此,工程框架已生成,可通过 STM32CubeIDE 进行用户代码的编辑、编译、调试。
1 S( t/ z/ b8 K3 m+ W' z" W" b6 F2 q( V

3 l" O2 d# U* ^7 D3.2. 从 STM32CubeMP13 开发包导入工程
) K' d+ C- c5 S' P- `若已事先通过 ST 官方网站或 Github 下载了 STM32CubeMP13 软件开发包,也可导入开发包中的工程示例代码,从示例代码开始进行项目开发。$ c6 ^6 d3 r2 z7 L! _

5 f9 R. [4 k& x' i. h
这里以 FSBLA_Sdmmc1 工程为例。( t- a8 Y( F. G* Q6 _
项目路径:\Projects\STM32MP135C-DK\Applications\FSBLA\FSBLA_Sdmmc10 g5 Y) S7 S$ g& G: s
1. 打开 STM32CubeIDE,导入 project$ X& x& c+ D& j: k* ^6 u! m
2. 点击 Files -> Import…
9 C! s' C+ Y# y5 N( B( l, e. P5 u 11.png
+ }9 J' q0 k  S" G( u# j+ k
▲ 图 11 STM32CubeIDE 右键项目菜单4 f& ?/ v8 g4 X# N

. w% T) L0 _9 a. A- E

5 O0 l% S/ H# i# x, C4 V3. 选择 Existing Projects into Workspace/ r% L1 l0 G, ?" Y7 `5 c* R+ A
4. 点击 Next>
$ h1 w" \( I' H. c, ` 12.png
1 m: H: u# b. c/ x: P# M

  }6 k/ [& A" Z* j, Q▲ 图 12 STM32CubeIDE 导入已存在项目4 K' n  t7 c7 u3 q4 N
. Z+ n+ ~7 ?; L4 w

# J/ b! m2 U8 d* U4 m& e5.点击 Browse…,找到目录 \Projects\STM32MP135C-DK\Applications\FSBLA7 K! ?) h! I$ W1 Q2 D( p
6. 选中 FSBLA_Sdmmc1_A7 工程
, w% B3 D. ?, [% D8 ~3 v7. 点击 Finish,导入 Project( S2 p# }& t2 ]+ @
13.png + m; J8 U0 V9 I% ?; P$ G; U3 K
. o* A" X& Y) a# ?+ Q. I
▲ 图 13 STM32CubeIDE 选择导入项目
3 `2 j" j, `" i  g9 ?9 Y  b& F6 n; H) N! l2 w% y3 F9 w$ H: |

3 O8 {$ \. w. L. T0 i: R; l8. 工程导入完成。, F# i" e, R1 k! [

% ]& g- p8 q3 p9 |# a

  y" O+ A& b; ]6 s" n& m/ ]) e7 _04 STM32MP13x 工程的在线调试8 G7 N' S3 h5 l  ?% _8 ~# v
工程创建完成后,接下来本章节将介绍如何基于 STM32CubeIDE 进行工程编译及在线调试。: v( Z: y1 L: }% d

& ]- X4 I. w% B4 x
STM32MP135 内部包含 128KByte SYSRAM,若代码小于 128KByte,可直接运行于内部SYSRAM 中,适用于验证一些简单的外设实例。若代码大于 128KByte,则需要将程序运行于DDR 中。下面将分别阐述。4 A  S0 m- ]# t6 L
4 {3 s3 g) \; S2 y9 E
4.1. 在 SYSRAM 中调试程序
, B0 ?1 H8 U& m7 I仍以前述导入的 FSBLA_Sdmmc1_A7 工程为例。# O* P  A/ y: A" M* M9 g+ w
1. 首先,将开发板切换到工程模式+ D1 a9 j9 J1 s
2. 连接 Type-C 电源3. 连接 MicroUSB,这里板载已支持 ST-Link
. @# W: U: M9 c 14.png 8 d3 K0 Z  c3 i4 v

  a8 D6 b% A  `0 m: |▲ 图 14 开发板切换工程模式3 [; U. b" t6 k0 H- t9 T! V8 U* A

+ h6 c4 z, R7 Z( A# S( {& P5 m3 C: ]
4. 右键项目工程名称,选择 Build Project,完成编译。
& R) j6 G& ~7 M; _3 }* G 15.png & |% B4 J3 x- W* Y1 T8 D- a) Y

/ l4 x+ v$ |+ d8 l( n▲ 图 15 选择编译工程
7 y$ F% G. o) e3 N+ A/ m' l1 ~! S" M& u! n) @
1 a) e" v) F  V/ C( H) q$ a% @
5. 右键工程名称,选择 Debug As -> STM32 C/C++ Application9 X! l, T1 G, l9 m
16.png ; P$ l" V. D4 [' k; m

* e% [% R8 C9 w; M4 h% p▲ 图 16 选择调试项目方法 1
7 b% Y  |% Z# X" R1 V) f& ]6. 或点击 Debug 图标2 ^  E, \% P& \; C
7. 进入 Debug Configurations….3 `9 ]8 ?' |( Q( ?+ z3 M6 q
17.png
5 m$ Y5 a, a& Z! B
/ K! N6 k3 ~6 o
▲图 17 选择调试项目方法 2
) T  J' R& R2 s1 a1 n( v0 H
# S+ Z9 {  `% J3 S1 t6 t+ I6 Y

2 D6 _: I4 i, j8. 进入调试配置菜单, c+ Q3 i  W& i! O* b# I
18.png
3 H4 p: R' J, u9 _: V
* F  M  n. h' n+ r3 `. v5 \2 i9 [6 A
▲图 18 调试配置页面* i7 t& \. A! ?7 @4 y" t- X

$ s0 b/ ?& V: B/ [
1 h' Q: e. e; p# o
19.png 5 q: f+ T  s' T3 u9 u
" R) B1 u8 a" \

: @1 e- P% @" m0 s
) r7 O+ H" ^9 Z( I5 V5 X
9. 即可像 MCU 一样调试您的代码。* C0 @" ~- H- \2 @5 Q
20.png + }) x# o% }3 h; e
. ?1 c$ J0 j* i& w) D! \2 |6 n2 E
▲图 19 项目调试窗口: U" y. s% \  v  j4 P5 i0 K
+ T0 p3 H' a8 Q  H. {6 [
4.2. 在 DDR 中调试程序  Y+ Z% Q* ]+ C2 K: W* H
当代码量超过 SYSRAM(128KB)的大小时,需要将程序运行在 DDR。这里以 BSP_BasicTemplates 工程为例展示如何开发运行于 DDR 的用户程序、6 l% s* D- i! r( z& p1 h# z
: O( d8 N$ g2 w: g1 N  S( ^2 J( C
1. 首先,按照前述方法导入项目工程' H/ ~# |' j# z) N
21.png + b1 G. w' {3 d) }' v

/ N! J5 \  V0 ?▲图 20 导入 Templates 工程, _, i5 v9 N, l" D; J7 t

- Q& F' \9 G) G, L! p) f, d9 @
* b# J4 n& L! I4 T8 U! p  _
2. 打开 C/C++ Build 配置4 {- \# I4 t+ V& R# I
3. 在 Preprocessor 中添加 USE_DDR 宏定义
* P& n) X, N# x$ T 22.png
( A4 S& h0 B" G" O& Q9 N  {
* ?$ f6 ]* P, y# x4 j) t6 L8 J: p9 R
▲图 21 使能 DDR 宏
2 _/ O# R' n& F6 N) y- B; j3 w5 U* m8 B! d; j- Z
5 q9 p$ T- y1 n3 f- V
4. 修改链接文件,重命名为 “stm32mp13xx_a7_ddr.ld”. J1 x: X- B- g$ m( B
5. 修改 REGION_ALIAS 定义到 DDR 区域:* k+ \3 A% L+ z1 y. t6 C% ?, g! h. L
6. 重新编译后,目标文件将链接到 DDR! z7 j7 F. z; r5 a1 E
23.png : @8 O9 p6 z/ \. R
5 u) R4 r, N9 K
▲图 22 修改链接空间! q# a: w# `7 D. D
24.png - v1 n( P4 h" |2 \

& ~2 }7 {$ @, E( N: u4 G▲图 23 选择链接文件; o1 |+ L! L8 s

" G* Z3 {9 S7 L; P' l6 `
7. 在调试之前需要先运行 DDR_Init 对 DDR 进行初始化
4 S0 U. k2 K; K- M: v8. 按照前述方法导入 DDR_Init 工程,编译后全速运行一次,并保持开发板不掉电项目路径:\STM32MP135C-DK\Examples\DDR\DDR_Init, G9 p4 v; s2 q( I
25.png
1 `8 Q" n; P( U

2 T. O0 U/ V# Z- {3 H( B1 l6 x▲ 图 24 运行 DDR 初始化
( w# q. F( y7 [5 A9 V2 O" C& O$ X" P; Q: h% _. x# ?0 z9 @

  P7 z' g  p; I5 F6 i% x3 ?4 p9. 回到 BSP_BasicTemplates 工程。% S* B: z+ o  W2 ?: z
10. 在 Debug configuration 对话框中,将 Startup 页面的 monitor reset 删除。
' D' j) E- y4 k- R- F" @% t 26.png
) ?2 D( \% ~; y4 y; D' f

+ \: l0 O( s3 D) P1 I4 c9 j* d  ]4 _4 i▲ 图 25 修改调试参数; l0 W- J8 _# ?7 v( ^- J

* z) {! G7 t2 u: ^7 L
7 @1 D$ m, Z6 g7 X
11. 点击 Debug 进入调试+ S1 M' _! ^6 X& \8 A
12. 可以看到当前 main 函数的地址已经为 0xC000 开头的 DDR 位置4 R6 ~& T' @& w1 ~* m
% h( p! e6 Z; |% [+ H

7 S# r4 ?; Z* L2 u 27.png
2 n7 r% Q! i0 }& O/ i; o: |
- `2 ]0 i* e( _  @7 Z* P4 Y
▲ 图 26 在 DDR 中调试工程8 {# I( R* @4 C$ V

  x: i" [$ l: y
+ q( O+ _# a% ^) }
05 从外部 Flash 启动
2 n* A8 f' C# K 28.png ( _+ C3 ]! ]8 B# Z/ [0 M8 G6 h

! H, Q  P5 p* j5 {6 w3 ?▲ 图 27 STM32MP13 启动流程* a0 D& M) s* ^' z& D' F; K1 D3 ~
. u# ]- G8 o0 C! T8 t% f  m0 R
从外部 flash 引导 STM32MP13, 一般需要包含两个部分源码。如上图所示,芯片上电后,首先运行内部固化的一段 ROM CODE,ROM CODE 从用户配置的启动器件中寻找 FSBLA,并将其拷贝至 SYSRAM 中,FSBLA 运行后,执行 DDR 初始化及用户代码(CUBE EXAMPLE)拷贝到 DDR 中,最终实现跳转到 DDR 中运行用户程序的目的。
; |# C2 R5 ^$ `6 h
3 S+ M  O6 Z$ r# j
这里以 SDCard 启动为例,在第三章节中,我们编译调试的 FSBLA_Sdmmc1_A7 工程,即实现了 FSBLA 部分的功能,BSP_BasicTemplates 工程为实际开发的用户项目。完成启动需要将这两个工程生成的镜像文件都烧录到 SDCard 中。
1 m9 e, S& [% m, }
, g2 u& ?  q: D3 ]" f$ |
• FSBLA 需烧录到 SDCard 的固定位置 LBA128 或 LBA640,ROM CODE 固定从这两个位置寻找 FSBLA。. k/ M9 O- A) v, B0 |
• CUBE EXAMPLE 的存放位置可在 FSBLA 程序中修改,默认为 SDCard 的 LBA640。
, {. y% P. E4 o. |9 W; P& d• 如果有烧录过 OpenSTLinux 的卡,需先格式化。原因是 ROM Code 优先从 GPT 分区表中寻找 FSBLA,若分区表存在,新烧录到 LBA128 位置的 FSBLA 将会被忽略。" D6 u5 a. B+ B; }3 R7 W( s  ~
29.png & r2 g0 H/ o# A7 o
▲ 图 28 镜像在 SDCard 中的 Layout, i3 \' O, w% R2 w: {4 O2 O

' S' E5 U; K4 Q! K0 z
需要注意的是,FSBLA 和 CUBE EXAMPLE 都需要加入 STM32 Header,才能被系统识别。STM32 Header 是 ROM CODE 加载二进制文件的必要格式,每一个被 ROM CODE 加载的二进制文件都需要在头部添加特定的 STM32 Header。STM32CubeMP13 开发包中提供了ImageHeader 工具,用于为项目二进制文件添加 STM32 Header。开发者不需要深究 STM32Header 的详细内容。3 @2 W4 X4 f. k6 x8 H) Q  [, ]" x
30.png 6 F/ r( R5 a( V8 p8 j) l8 I
▲ 图 29 STM32 Header 信息
0 K& V+ _& o" ]# U
! B9 S6 `3 W* f2 A) w* j
为用户程序加入 STM32 Header,可在工程配置的 post-build steps 中加入如下命令:3 N0 p5 i0 s, q& X% L) @
“(path_to_STM32CubeMP13
) Z; x2 F3 L* `Package)/Utilities/ImageHeader/postbuild_STM32MP13.sh"* K# s' N! b- R6 M/ X
"${gnu_tools_for_stm32_compiler_path}"
( B+ E! s0 c/ ?+ R"${BuildArtifactFileBaseName}"
) m, [, z2 s; V- F
* A4 H( m2 J6 p; `/ W
, Z! [9 \# p6 ]4 q+ k
重新编译完成后,即可生成打上 STM32 Header 的目标文件。
$ m: R0 R0 r% r$ V 31.png
  z8 \. f  g# P) e8 ~# s/ @
▲ 图 30 添加 Post-build 命令4 I4 g# h* @4 f, d1 E' n
( G0 d6 x1 R) [9 ^: s, ?. H
注:path_to_STM32CubeMP13 Package 为 STM32CubeMP13 开发包的存放路径。
+ b( `3 N& A% e" T: f
5 W* v# ^6 J% u0 ?, e, u: p
至此,已准备好待烧入 SDCard 的目标文件:
4 C, d- l1 a" |; |* n9 R1 m7 s1. 已添加 STM32 Header 的 FSBLA_Sdmmc 目标文件:FSBLA_Sdmmc1_A7_Signed.bin (即 FSBL)
" ?) W, J/ m/ X" _, v, J1 {6 N8 a6 K2. 已添加 STM32 Header 的 CUBE EXAMPLE 目标文件:MP13_BSP_BasicTemplates.stm32(即用户工程)
7 N7 D* f5 H( [5 `3 R5 d% G# w# n2 g, O$ y
烧录工程位于 STM32CubeMP13 开发包的如下目录:! U' w& j3 F' ~% I  I& K1 p
\Projects\STM32MP135C-DK\External_Loader,以二进制的方式提供了烧录时需要的两个引导文件,包括:# }5 z* }) K4 Q0 v7 h9 V
1.STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32
  @" j8 A5 L, b& u2.SD_Ext_Loader.bin其中,STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32 为基于开源工程。
) e& f( J1 Z$ B8 H6 v
- s( E. u1 X. T; T
. j; |6 ~2 g, n
Openbootloader 实现的一套 IAP 应用,执行烧录流程管理。SD_Ext_Loader.bin 工程执行SDCard 设备的实际擦写操作。( P2 E8 \( U$ v" e1 P. W" i& p

& n7 @* r/ m0 f: g
1 C! K4 |# z# {! F2 K
目前,引导设备可支持 SDCard,QSPI NOR FLASH、EMMC 等,若项目开发中需要修改适配不同的存储设备,可联系 ST 窗口获取烧录工程源码。
; g* I8 M( `( @% j1 g1 R7 h7 g; I# i; ~# l, ~6 I3 e; k7 V. s
将需要烧录的两个文件拷贝到 External_Loader 目录下,与烧录工程的两个文件存放在相同位置,然后修改 tsv 文件。完成后,目录中文件列表和 tsv 文件内容如图所示。/ e9 U: [; a4 N8 q; `
32.png
% N1 H5 M/ [* Y3 R; }0 S
▲ 图 31 烧录文件列表
5 Q7 I& i( ~7 b, ?( H& v6 k" J- S 33.png ( h" V  g" [2 D% N" T8 `0 m
▲ 图 32 tsv 文件内容
' W1 [2 j/ ~# G0 u1 C0 _# f3 j$ T2 @
( H, Y, C+ m! s  O/ B

/ m: N+ v/ e& e/ ~5 @1 ^接下来,即可使用 STM32CubeProg 进行镜像烧录。可支持通过 USB 或 UART 连接,不支持通过 ST-LINK 连接。这里以 UART 连接为例:
2 f  G% T  M0 {8 c) x# \6 d4 {1. 开发板跳线设置到 000 并上电
8 C* [( b: V+ x% g( z- J0 ^. M! X3 ~: @2. 连接 MicroUSB 口,查看 COM 号。注意通过串口连接时需要断开 USB OTG
# m6 R  G! \- ^6 B, h  Y3. STM32CubeProgrammer 选择连接方式为 UART,选择相应 COM 口  S$ `6 x% ]3 O- Q
4. 点击 Connect 连接
: J" r$ [: M6 d 34.png
  h  O) b/ j) o+ P- W9 V& F/ _
: _- n" O& H3 M5 e! } 35.png 6 j' q, d0 k9 l5 v0 Q. ?
5. 点击 Open File,选择 FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件8 l  ]6 w# C9 H% K( x
6. 点击 Browse,选择目标文件夹:\Projects\STM32MP135C DK\External_Loader\SD_Ext_Loader
2 m" a) ]: P6 x7. 点击 Download,开始下载镜像8 m& r* j/ _1 ?! q( r+ r
36.png
( H/ L8 L. l. h/ S5 @0 R. `
' o; H& m7 o4 ?5 [; `6 Z
37.png ; I: q# v6 R, {5 n# |7 y" i
/ v+ j% f0 ?% [
8. 等待烧录完成
! V( a" }( o; y0 H7 A- Z/ u9. 将板子断电,boot mode 切换至 SDCard 启动
5 i. F' `/ R# ]( V% T2 Z9 H10. 重新上电,即可引导启动& V9 d9 G8 }* \! ^  G. I( X4 C
38.png % O0 B9 J& d6 u7 B; X
3 _8 [/ y, J1 ]7 X+ l8 R
转载自:STM32
6 y8 s: V" O9 N% h9 B. @1 M  l$ J; a" {, O, M' v
4 D- O% h! h& Y0 W
收藏 评论0 发布时间:2024-11-22 19:09

举报

0个回答

所属标签

相似技术帖

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