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

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

[复制链接]
STMCU小助手 发布时间:2024-11-22 19:09
01 引言
5 ?2 j2 J! I- o% O, |8 N0 ASTM32MP13x 系列 MPU 是 STM32 Arm®Cortex® MPU 家族中的一部分,它拥有单核Cortex®-A7 核心,支持核心频率 650MHz~1GHz,不仅能够轻松运行 Linux 操作系统,还同时提供官方 HAL 库,用于支持基于 RTOS 或无 OS 的项目方案,即裸跑应用程序。
6 G6 s( x$ {! B  e* M
, q8 M. y  w  q1 g8 x/ ~* S
本应用文档将就以下几个部分简述如何在 STM32MP13 系列 MPU 上开始无 OS 项目的开发:
' x. w- [  {& P• STM32MP13x Baremetal 开发环境简介
6 M$ Q$ q* F6 }* l$ H) s4 s9 q- q1 B• STM32MP13x 工程的创建. Q1 F% ~  y) m: H
• STM32MP13x 工程的在线调试9 R1 A* `$ Q% J4 C- ?6 V" B, e. K
• 镜像烧录及从外部 Flash 启动3 c9 T2 B0 j& H

- Q5 ^5 [; U* C* o1 r9 c" b02 STM32MP13x Baremetal 开发环境简介
3 Q8 F1 O" d% K+ d4 p2.1 开发工具及环境
' M' I# P; z) H- k' E) XSTM32MP13x Baremetal 开发工具主要包括:
$ y3 S  C6 Q, i+ F7 B/ p# o1. 烧录工具:STM32CubeProg ( 版本大于 v2.15.0); O3 c. D; i9 j8 A$ V
2. 配置工具:STM32CubeMX (版本大于 v6.10.0)
9 L0 Z- M8 c# B$ X3. 开发调试工具:IAR(版本大于 v9.50),或 STM32CubeIDE(版本大于 v1.14)- Y; u4 u8 D1 J  z: \/ n
本文示例基于 STM32CubeIDE 开发调试工具。
# H6 ^- M# m  N2 y2 H
4 W! H3 k" Z6 M) T, \+ |

. |( a% O  v7 K4 q2.2 STM32CubeMP13 开发包0 J7 }( U0 f) ?) ?) Q- S
STM32CubeMP13 开发包同步发布于 ST 官网 www.st.com 和 github.com,可通过如下方式下载:
2 q) f4 m3 C! {6 ?( W2 m1 T! p1. ST 官网下载链接
2 ]0 \/ Q: w. Q9 G2. Github 仓库链接
: Z2 a5 y' C/ ?# B  U2 A4 X3. 通过 STM32CubeMx 软件下载1 W3 j' E( R) ^1 N/ `) |* d& z% Y

" \* W4 i0 }. `9 N( q# \8 e, J
2.2.1. STM32CubeMP13 开发包总览
% S) j! w' `. H. t  \) Y. ^9 j1 \5 C+ \STM32CubeMP13 开发包运行在 Arm® Cortex®-A7 处理器上,由以下三部分组成:
8 X* A$ Z: C0 c4 d9 a0 K$ \• Level 0:驱动程序,包含 HAL、LL、BSP、CMSIS% k2 W: a+ c$ X2 f
• Level 1:中间件,包含 Eclipse ThreadX(原 AzureRTOS),USB Host & Device 库4 |$ K+ ~) x0 N' f
• Level 2:包含各种板级示例程序+ [) w9 H: N/ N* b5 ^
除此之外,还包括一些工具助手等。/ H4 W# L. H" u5 T

- ?4 i. K& j) K
! D. W  r5 h" {6 u$ a
1.png
! I  c9 B8 j* I' G/ W
▲ 图 1 Baremetal 开发包源码框架/ q' D0 }5 N$ ], B3 G
) W8 v; ]4 i% a# u
$ A" ~. e- c' _. ]$ ~# g0 A
2.2.2. 源码目录结构
7 Z8 d1 O% W5 \ 2.png 8 U& W" N8 G8 A- Z! n6 v
▲ 图 2 Baremetal 开发包源码目录4 \8 p0 x  F9 w; |9 j3 U
/ W! k6 ?7 i& s/ n4 Y  L" h
2.2.3. 开发包支持模块列表
" O! v. z' y: f3 x; L$ Y已支持的 HAL drivers :( f& m+ u9 [) _7 ~
• 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
1 I8 t$ M' e" I# {" m% w5 R! a8 P3 ^4 \
已支持的 LL drivers :8 q, L& \7 y3 {( \$ h/ ?& J7 F
• ADC, DMA/DMAMUX, EXTI, ETZPC, GPIO, I2C, LPTIM, MDMA, PWR, RCC & BUS, RTC, SPI, TIM, USART* w" n6 |, J8 F- P

4 c/ ?; h& ^" Q
BSP 与 BSP 组件:
4 j1 ]1 |1 h  v6 |; v, P- B6 S• 基于 HAL 封装了更高一级的 API,为 LED、按钮、相机、LCD、SD 卡和 COM 端口提供 API,包含了以下一些外围器件的驱动:GC2145, LAN8742, MCP23x17, RK043FN48H, STMIPID02# C6 R9 w- l- d/ m# @6 d

  s" H1 b8 Y" |% ]
中间件程序:
5 Y" s- G4 n# f* K8 I* R9 `• 包含一系列支持某种服务的库文件及接口文件,目前已支持:Eclipse ThreadX(原 AzureRTOS),STM32_USB_Device_Library,
% ]. g0 ], K1 {5 M( q$ tSTM32_USB_Host_Library$ ?2 @8 P5 e" o2 Q0 K; J

) A6 H9 o9 ?! K( }3 }9 {& y
项目工程:1 E& C8 [* v/ Y3 N# Y9 U# o( f; h. f7 A
• Examples:基于 HAL 接口的简单示例,没有中间件功能。6 y7 c$ {. a+ t/ [* `/ x/ C
• Applications:较完整的工程应用实例,包含中间件功能。
- W- y: v0 K; W# O• External_Loader: 烧录镜像及从外部存储器启动的应用示例。$ C  _; u/ ]4 G( g
• Template: 板级工程应用框架。& _: \+ n+ O7 k& g+ m4 P4 m

# }% h8 b4 W" O+ Z, u7 U5 F$ B, i
实用工具:
, `3 G4 @# n! [• Imageheader:用于添加 stm32 头,支持存储设备启动。* C  D! X, @2 s" [
• Fonts:提供了一组用于显示的标准字体,包括 font8,font12,font16,font20,font24: e( E- V& R7 g

4 U: E# p# F; M! K6 D. l& Y0 v
7 K4 h. V4 J: Q* h( `1 b9 L
03 STM32MP13x 工程的创建
5 e) W0 j$ Z8 M, e1 @STM32MP13x 工程创建,可通过以下两种方式:
/ x+ w) j: O: Y1. 使用 STM32CubeMx 配置并生成项目框架代码,并基于该框架代码开发应用。
* w5 r, c& u' u- ?, c( `2. 导入 STM32CubeMP13 开发包示例工程代码,并基于该示例代码开发应用。- A2 F* U& F, f
' f- l8 o$ Z- U! j4 G
3.1. 从 STM32CubeMX 创建工程
8 F4 l: _2 l( |STM32CubeMX 是 STM32Cube 工具家族中的一员,它采用简单易用的图形界面,可以帮助开发者快速配置硬件和软件。可支持从 MCU/MPU 选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置等,并可生成适用的 C 代码项目。: h  z2 J! u+ N& B: a

# y0 J( C- X, B3 e# }; V/ o
本章节简述如何通过 STM32CubeMx 生成适用于 STM32MP13x 的裸跑应用框架。使用该方式无需提前下载 STM32CubeMP13 开发包,STM32CubeMx 可自动联网下载。9 B6 v; L$ }) |2 C  {$ W
1. 打开 STM32CubeMX,点击 ACCESS TO MCU SELECTOR,
) E+ A4 q  v- f# b2. 在搜索框中输入 STM32MP13 相应料号,如:STM32MP135FAF7,双击打开配置窗口3 l. @6 u. X! X/ Y5 k
3. 弹框选择 MP13 Bare Metal,将生成 bare metal 工程框架。
' f  F6 @  m; P* L/ U' v( H 3.png
. o, r9 a" R- n7 a4 h

( \1 p7 [' r, d  ?# i% p" r▲ 图 3 STM32CubeMx 选择器件) q  }) [4 D: ^* m' O  l* T
4.png 5 p! |: ^, I3 F; c+ {5 }8 G$ {
: {6 k. A+ w" c) z# s5 E& [2 g
▲ 图 4 STM32CubeMx 选择工程类型: K" T1 x  W8 x4 n3 n! m
; v( X6 ?' o4 S" V) K# p" l  K1 r
$ Q5 c4 X5 g9 C* S- R, I0 ?( R) v
4. 切换到 Project Manager 标签页,输入工程名称。- }! u8 _8 q& {; \$ `1 [& u" c+ O
5. 在此页进行项目选项配置,可保持默认。6 d4 r, E- N& O* h
5.png 8 o2 c( l0 h+ ?8 `( h3 I0 q- \
. @  i6 g2 a& p# @" ]
▲ 图 5 STM32CubeMx 工程设置页面
; o, o- t- y7 F, q- J8 q8 P* {- X8 y
" L# v- U; X4 l7 d* o
( o$ r2 n" R7 n
6. 回到 Pinout & Configuration 标签页。$ i% p' d; [# b( c4 d7 R- F
7. 使能 RCC 和 DDR。
  {. r9 ?; l' K& g$ o* a; y8. 配置各外设总线,配置方法与其他 STM32 MCU 相同(也可参考 Help -> Docs & Resources)9 R' k, X, Y3 e/ L' f: ?* T7 i

2 X& r0 @. I; t& h4 i, x4 g* y/ f, B; c1 d

, ?! E7 T3 C' T7 W/ } 6.png ) u1 e( V9 ?2 F! n2 P

" k4 ^$ c" z* F  j9 p▲ 图 6 STM32CubeMx 外设配置页面" r2 g* k% }% P) i

+ A' _. L; q- T) W
* I5 t+ x# M. O: `+ [5 e6 A( |
9. 切换到 Clock Configuration 标签页。
5 }) `& Y4 L: @* n10. 若软件报告时钟错误,可点击 Yes 自动修复。
7 s1 o3 U7 B& [3 c1 y* ^/ D5 G11. 输入 CPU、DDR、总线等的工作频率,系统会自动匹配合适参数。
9 r5 t$ `" U2 {7 Y7 l% k; H1 v" L; S0 B. s' ~
7.png
) I. w7 \( L0 Q. ~* F0 ]▲ 图 7 STM32CubeMx 时钟配置页面# b; p$ B( `/ E) z' y' O- Q
; d: L9 G! `7 x: }9 `, F, }

3 C% \4 F. a0 o! q1 g) a% z12. 所有外设配置完成,即可点击 GENERATE CODE,开始生成工程代码。$ ]) ]/ U5 P/ U/ E8 ?
13. 若第一次使用,软件将提示是否下载 STM32CubeMP13 开发包,可点击“yes”,软件自动联网下载前述 STM32CubeMP13 开发包。  o/ F) b% {- Q9 }! b
14. 生成完成后,可直接点击 Open Project,将打开 STM32CubeIDE 工程。3 m1 C" z1 Q. i' \; m4 x
8.png
1 M0 n3 V' a. u# d( q4 F
* n) p& ]$ ~% f# J& m: R5 v$ o; @/ g
▲ 图 8 STM32CubeMx 代码生成页面: l3 j" U/ E9 M9 J. Y- s
9.png
; B; u, v: d2 O( G# k
▲ 图 9 STM32CubeMx 完成代码生成页面
1 o6 ?9 p+ O/ L/ |6 o! A! C" N 10.png % Y9 R" `' b8 u# O6 g" X+ a
▲ 图 10 STM32CubeMx 生成工程代码示例$ }4 ?8 S+ M, d/ s
! |4 X5 N+ |. }
15. 至此,工程框架已生成,可通过 STM32CubeIDE 进行用户代码的编辑、编译、调试。9 E7 I6 y4 M' m( U

* C1 Y  ~, N0 y
) V) m6 ]) v$ H- W0 Z: P8 A# t$ Y% k/ d
3.2. 从 STM32CubeMP13 开发包导入工程* L, ]& u9 E! f, {
若已事先通过 ST 官方网站或 Github 下载了 STM32CubeMP13 软件开发包,也可导入开发包中的工程示例代码,从示例代码开始进行项目开发。1 t# E: c" g) d+ c
4 p0 o8 J+ o" u9 `1 ~
这里以 FSBLA_Sdmmc1 工程为例。/ c# u/ v$ f' U+ u& `* L: ?
项目路径:\Projects\STM32MP135C-DK\Applications\FSBLA\FSBLA_Sdmmc18 G% z6 `' p5 C) Q( z+ \
1. 打开 STM32CubeIDE,导入 project: l6 ]; g+ e4 N0 Z+ U
2. 点击 Files -> Import…; b3 K; s- a" x6 o9 S
11.png
1 y! p) |1 n  {$ B+ L
▲ 图 11 STM32CubeIDE 右键项目菜单3 ]# C/ J3 l9 k! @

. g% ^* O' c9 x$ G6 `5 M

; B/ ^( t5 ~9 r3. 选择 Existing Projects into Workspace' g3 H2 K' n3 Q1 N+ g
4. 点击 Next>9 p6 k# C" k$ V. Y
12.png % ]4 l# {7 P4 s  d
$ [% \* ~" u  M$ `& n2 h8 ?/ M6 w& D
▲ 图 12 STM32CubeIDE 导入已存在项目. Y( z1 ^7 t7 [" _

2 L- K1 D' \, c, k( D

" J  ]  e( T3 b5.点击 Browse…,找到目录 \Projects\STM32MP135C-DK\Applications\FSBLA7 S8 Y: U+ L5 [& Q7 j
6. 选中 FSBLA_Sdmmc1_A7 工程# J, ]+ S0 [# l! Z5 Q+ G$ [( Q& I
7. 点击 Finish,导入 Project1 h4 J0 D8 G& \) x
13.png
* i2 Z  l& t! u! `+ w
0 b% `' O/ Z8 `
▲ 图 13 STM32CubeIDE 选择导入项目
6 _$ d; m* x0 i; t& A9 u
: A$ z( |+ n& O4 T1 ?& N

. x5 q  e, ~8 U5 v  o2 e# p' q: b8. 工程导入完成。; G, _  u  m( D" |; f
3 m$ B/ ~* y. z3 ^  ~% p, c( n
# }, b7 ~  t$ V( g9 g
04 STM32MP13x 工程的在线调试$ V/ [# \) O3 {* u+ Y4 C3 I6 D, v
工程创建完成后,接下来本章节将介绍如何基于 STM32CubeIDE 进行工程编译及在线调试。( f' K* @" Q2 ~: q! c) p1 v

  ?5 L4 K; J8 j. j0 p
STM32MP135 内部包含 128KByte SYSRAM,若代码小于 128KByte,可直接运行于内部SYSRAM 中,适用于验证一些简单的外设实例。若代码大于 128KByte,则需要将程序运行于DDR 中。下面将分别阐述。5 }4 n! i! W* [
$ p* U( K. f( I' i5 E9 L% r* i4 K
4.1. 在 SYSRAM 中调试程序
; F; ]7 T8 T6 ^+ q" {仍以前述导入的 FSBLA_Sdmmc1_A7 工程为例。
& K+ J) s: a# v1. 首先,将开发板切换到工程模式2 r6 \: f8 U. [3 L' ~2 z/ Z
2. 连接 Type-C 电源3. 连接 MicroUSB,这里板载已支持 ST-Link* M8 }1 p5 g" E7 n5 C7 Z
14.png
7 }" I- K+ r2 L/ }5 j0 P% I9 S

; n" M4 O. D8 v3 z0 ~! J; y▲ 图 14 开发板切换工程模式
/ f) \. K$ I4 w8 w$ l3 |9 D6 S6 m  X& q. ~
4. 右键项目工程名称,选择 Build Project,完成编译。" U* r5 r, l% p
15.png
( [8 ?9 a6 R1 h1 f+ ^! |0 |
6 s& o+ T5 z* z; |
▲ 图 15 选择编译工程
2 n* L2 _( e6 l/ R
/ T5 d. T. h3 e3 F9 _9 ^, t; H

; ^" P; T& n2 b0 b. z& v5. 右键工程名称,选择 Debug As -> STM32 C/C++ Application
6 E1 }4 H4 n  m; \/ j: g; H 16.png
: B; U; w! @1 m: M, C" g  E
5 n8 [8 |8 ]/ a+ x4 Y/ p( u/ {
▲ 图 16 选择调试项目方法 1
6 V( p5 `+ n, f# v0 }+ g6. 或点击 Debug 图标
# K# I; J# n6 f6 B, L$ I7. 进入 Debug Configurations….
5 S# a- q" ^; T- j5 B5 q& V0 B 17.png
- D( O/ L" u5 E% S, q+ M/ v
; |9 q# d5 ?1 T
▲图 17 选择调试项目方法 2
. O  o/ P  V' w3 |( T0 a- |' v5 l2 T7 D5 b
( v9 X' u  O3 u: n
8. 进入调试配置菜单0 r5 M) ~: C9 Z: q6 a- }- m& P2 E
18.png " {$ S) f" g  @; C* ^9 k; s. r
' P* B6 F, ?: o% }, N* D
▲图 18 调试配置页面" E1 t6 C' R3 G4 l! @3 |

; ~' H8 b, _2 L
7 B- C( z) O3 P
19.png 7 [+ k! i( t* c) H: w( V. x

, s$ O9 P# K. U2 M2 c5 z* B6 }- s
9 M9 c; E/ f3 G  h2 I
9. 即可像 MCU 一样调试您的代码。
0 y. B. ~  w' H 20.png 9 I; s& [) P' m+ w  J8 H

( @- ?' \! p$ F3 I& i▲图 19 项目调试窗口/ J/ L: T4 Z% h. o+ d' J$ D7 t, g
' Y: N/ n* R# V9 X
4.2. 在 DDR 中调试程序! a* {' ~- o+ {% j& {8 _
当代码量超过 SYSRAM(128KB)的大小时,需要将程序运行在 DDR。这里以 BSP_BasicTemplates 工程为例展示如何开发运行于 DDR 的用户程序、- @+ Q' T. j% [- b0 `: c( G+ _
! s+ f9 e' l# o- r
1. 首先,按照前述方法导入项目工程
+ D% H* a& ~/ C 21.png 4 V3 L3 R/ ]- y& q" P3 A6 O) _, [) l

- u) m, s7 u1 {▲图 20 导入 Templates 工程
+ P: s; ?4 c8 k! D( t: |& X5 i& z$ H+ q0 z! P- M) Y! c
$ [- ~7 A: c$ d2 t7 k6 H# D
2. 打开 C/C++ Build 配置
* R' l4 x$ B. ]9 ^3. 在 Preprocessor 中添加 USE_DDR 宏定义. Z/ Y5 y; @8 J% T$ B' `
22.png ) e0 \% J9 H- k) c0 r; [+ Y& U
% y% ~7 q5 t  J6 Y0 z7 N1 W: G7 n
▲图 21 使能 DDR 宏8 E* a8 Y- H8 h  l( P; N; M% H

: n. z( J; O* U% P

+ t: l$ x; w" _% T* o4. 修改链接文件,重命名为 “stm32mp13xx_a7_ddr.ld”4 O) l) R9 y! I
5. 修改 REGION_ALIAS 定义到 DDR 区域:
) C6 q+ E6 B; {6. 重新编译后,目标文件将链接到 DDR
: C) {# X1 E7 X/ G 23.png ; ~4 R8 z0 @) x! @# s2 u' z" v

# `9 M& q. g' S: N8 Y" G# w+ j6 o▲图 22 修改链接空间
" T/ S5 h$ L1 Y/ u+ g 24.png 5 h) [0 K# J7 f! ~# O9 \
5 I; ?' ~, U7 K! d, ^9 r7 V; i
▲图 23 选择链接文件" }" k! L% J5 ~+ ^2 v" ~* P6 L
0 u' A$ `' N0 Q- i0 N
7. 在调试之前需要先运行 DDR_Init 对 DDR 进行初始化5 |0 u! _5 E+ n+ N+ B/ }( {5 f
8. 按照前述方法导入 DDR_Init 工程,编译后全速运行一次,并保持开发板不掉电项目路径:\STM32MP135C-DK\Examples\DDR\DDR_Init
% p& A4 M6 U0 y7 B2 U 25.png / J3 `. d# S9 O0 r4 K& d' E1 f

. z: B4 \2 G9 T▲ 图 24 运行 DDR 初始化
3 ~2 O' E% S4 u0 Z* ^9 n- D8 z3 o  o7 S! |) p) x! B4 w

7 @% f& X$ f. U- N0 J9. 回到 BSP_BasicTemplates 工程。5 ~1 S% y3 i. p( s/ R: H5 o
10. 在 Debug configuration 对话框中,将 Startup 页面的 monitor reset 删除。& k; y  m( e) `9 f' w+ ]' P. _% r
26.png & c4 R' q6 Y1 p" R4 H; `' h

# I/ r" m8 O# a7 x2 G1 G$ y+ A* r( O7 Y▲ 图 25 修改调试参数- q* s/ Z- \5 |; K

8 F4 L# c- L! m; v# h
( `; A4 M5 U; ^: }( Y
11. 点击 Debug 进入调试
) _! o+ R0 b. O& M! R% |* {! @5 K8 H12. 可以看到当前 main 函数的地址已经为 0xC000 开头的 DDR 位置
/ B4 }! G/ L% C, k. E1 L9 L0 ^- k. I7 d" ~' D' R2 S. g
. b9 f) S3 A" @. B" O& N: |
27.png 4 ^0 N7 w' T% S7 [

" n! _# L0 Z& `) m▲ 图 26 在 DDR 中调试工程% @4 y2 J) s( N- @
$ i7 P8 A: B9 k/ s( j; [) j

3 e9 f5 c: S9 ]# ?( k) l05 从外部 Flash 启动5 x% O" ]  I6 N; p+ x
28.png 3 I3 |" I7 k! _  ]) I/ f  {
4 X' j0 B0 d2 O5 L
▲ 图 27 STM32MP13 启动流程: `* n3 X$ M7 `( @; }6 y/ B

% ^" \4 i4 I/ @! ^
从外部 flash 引导 STM32MP13, 一般需要包含两个部分源码。如上图所示,芯片上电后,首先运行内部固化的一段 ROM CODE,ROM CODE 从用户配置的启动器件中寻找 FSBLA,并将其拷贝至 SYSRAM 中,FSBLA 运行后,执行 DDR 初始化及用户代码(CUBE EXAMPLE)拷贝到 DDR 中,最终实现跳转到 DDR 中运行用户程序的目的。
1 Q/ r- T/ `# w- Q: z- x. W$ r' o* e2 U. `' X
这里以 SDCard 启动为例,在第三章节中,我们编译调试的 FSBLA_Sdmmc1_A7 工程,即实现了 FSBLA 部分的功能,BSP_BasicTemplates 工程为实际开发的用户项目。完成启动需要将这两个工程生成的镜像文件都烧录到 SDCard 中。
( e2 w1 V2 W$ d3 v1 w5 i( |
) |( |- J; w" p2 f
• FSBLA 需烧录到 SDCard 的固定位置 LBA128 或 LBA640,ROM CODE 固定从这两个位置寻找 FSBLA。3 ]# d7 Z  ^, N, l  {
• CUBE EXAMPLE 的存放位置可在 FSBLA 程序中修改,默认为 SDCard 的 LBA640。8 U% `4 W( {2 k
• 如果有烧录过 OpenSTLinux 的卡,需先格式化。原因是 ROM Code 优先从 GPT 分区表中寻找 FSBLA,若分区表存在,新烧录到 LBA128 位置的 FSBLA 将会被忽略。
) f. o' f3 R2 e5 R. }- |5 {- Q 29.png % J% X6 k4 C5 ], ^( N7 y9 u; F
▲ 图 28 镜像在 SDCard 中的 Layout
0 N( }0 x# U" I* b  Z- w% K, _; K" l+ H/ s7 S# T
需要注意的是,FSBLA 和 CUBE EXAMPLE 都需要加入 STM32 Header,才能被系统识别。STM32 Header 是 ROM CODE 加载二进制文件的必要格式,每一个被 ROM CODE 加载的二进制文件都需要在头部添加特定的 STM32 Header。STM32CubeMP13 开发包中提供了ImageHeader 工具,用于为项目二进制文件添加 STM32 Header。开发者不需要深究 STM32Header 的详细内容。: z2 z) |  i5 \8 `+ A
30.png # e6 P$ }1 F7 ^( L. w1 e
▲ 图 29 STM32 Header 信息
  W/ h( \: h" S! F. [% S4 K( P
为用户程序加入 STM32 Header,可在工程配置的 post-build steps 中加入如下命令:8 t$ z% o8 v/ J  J% `6 |
“(path_to_STM32CubeMP134 s7 O# ?$ u* C2 }) X  ]
Package)/Utilities/ImageHeader/postbuild_STM32MP13.sh"8 z1 {1 `, `' I5 Z, I
"${gnu_tools_for_stm32_compiler_path}"
, c5 n& ?  H' M. G" x"${BuildArtifactFileBaseName}"
, V6 y  R- U4 _
2 g9 a8 K% N5 q' t4 R

: g1 Z9 g, G7 W重新编译完成后,即可生成打上 STM32 Header 的目标文件。
. C$ l% ~2 w8 ? 31.png
4 O1 Z8 N* N$ m# _" z7 b
▲ 图 30 添加 Post-build 命令
# t& E& a2 S# Z4 @) K, o
$ m/ O( f" i2 b) Z注:path_to_STM32CubeMP13 Package 为 STM32CubeMP13 开发包的存放路径。( I% i$ n( L& d$ n  S1 c  w1 i" L. @( ]
* q0 r7 }4 w- A+ `$ P" H! o
至此,已准备好待烧入 SDCard 的目标文件:
1 l* v! R( s4 {3 v6 L  h1. 已添加 STM32 Header 的 FSBLA_Sdmmc 目标文件:FSBLA_Sdmmc1_A7_Signed.bin (即 FSBL)
  |- n2 N, I+ s! G  x# x$ t2. 已添加 STM32 Header 的 CUBE EXAMPLE 目标文件:MP13_BSP_BasicTemplates.stm32(即用户工程)$ ]1 h& Z$ ]- ]' O% A( I
7 H9 T5 Z* L5 |) a
烧录工程位于 STM32CubeMP13 开发包的如下目录:# F+ {6 p; s& @: a. L2 }9 k" Y9 y
\Projects\STM32MP135C-DK\External_Loader,以二进制的方式提供了烧录时需要的两个引导文件,包括:2 J/ [7 b& P( o4 n
1.STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32
- y  @3 C" \# C7 V; w2 e2.SD_Ext_Loader.bin其中,STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32 为基于开源工程。" p# B2 [5 ], h7 m/ E
3 z' l( n) }7 R8 v. r5 u% a" E

* _- `! V( {% ~) V& IOpenbootloader 实现的一套 IAP 应用,执行烧录流程管理。SD_Ext_Loader.bin 工程执行SDCard 设备的实际擦写操作。
! a; s6 J. c; _+ K1 G0 w/ F8 i0 H
* L/ x  M( l& g2 F
! a! N$ V2 H) k) h0 `; x$ Y. Y
目前,引导设备可支持 SDCard,QSPI NOR FLASH、EMMC 等,若项目开发中需要修改适配不同的存储设备,可联系 ST 窗口获取烧录工程源码。
2 x- n6 k8 p- ~  t- f5 {0 v! t7 u
将需要烧录的两个文件拷贝到 External_Loader 目录下,与烧录工程的两个文件存放在相同位置,然后修改 tsv 文件。完成后,目录中文件列表和 tsv 文件内容如图所示。2 c$ Q; Q5 v* g9 t
32.png 7 ]3 V6 x2 x8 @
▲ 图 31 烧录文件列表0 r( W" \% Q: q+ M! |
33.png - {/ R5 |+ H: {, J
▲ 图 32 tsv 文件内容9 A4 Q( i" ~& |  B: M

4 G& y9 _- u- b. ^5 \
7 [% I) \9 s. G$ A( W( P
接下来,即可使用 STM32CubeProg 进行镜像烧录。可支持通过 USB 或 UART 连接,不支持通过 ST-LINK 连接。这里以 UART 连接为例:
; u* g+ p. W' c) I1. 开发板跳线设置到 000 并上电" D5 @5 o3 m% S& M9 N+ O
2. 连接 MicroUSB 口,查看 COM 号。注意通过串口连接时需要断开 USB OTG9 [+ u# U" q6 p0 B% X: n' y
3. STM32CubeProgrammer 选择连接方式为 UART,选择相应 COM 口  U3 h" x2 I( m! X# @. j
4. 点击 Connect 连接
4 W0 G* k+ j6 j. ]4 G  x; {1 ^* V 34.png 1 @2 {% H$ P: s* p% n0 J

! h1 |. E1 x( X+ {) b! `1 @# [ 35.png ! U7 a6 ^; w2 y$ P
5. 点击 Open File,选择 FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件
- t  Y% @# H4 C5 O& T6. 点击 Browse,选择目标文件夹:\Projects\STM32MP135C DK\External_Loader\SD_Ext_Loader
8 ]/ X% O3 K3 d% J  r: A7 I7. 点击 Download,开始下载镜像3 v  C* F4 P$ S: j
36.png   X' p( J! t# p2 U
- m" c8 D# H* V" S
37.png ' i" R9 Z" ]1 }4 e  }
1 y2 I1 {- W3 o7 m. _# _
8. 等待烧录完成' _' V& @/ ~& j; B; p% ]# M. ~
9. 将板子断电,boot mode 切换至 SDCard 启动& _* k' |. Z: b. o) [+ R
10. 重新上电,即可引导启动
3 g5 }4 h! o: o# d0 W& Q5 P 38.png : o0 g; c* B; q2 c. N& c

. u" W( Y/ }0 a2 Q* r8 U. D转载自:STM323 h( A. g4 v, L& p
0 V+ G% O7 f4 {8 A8 B

% ~( }7 v4 r0 W# M' D- t+ {
收藏 评论0 发布时间:2024-11-22 19:09

举报

0个回答

所属标签

相似技术帖

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