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

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

[复制链接]
STMCU小助手 发布时间:2024-11-22 19:09
01 引言1 U$ H0 ]8 h- h" {+ J$ W9 {" R" G" c5 k
STM32MP13x 系列 MPU 是 STM32 Arm®Cortex® MPU 家族中的一部分,它拥有单核Cortex®-A7 核心,支持核心频率 650MHz~1GHz,不仅能够轻松运行 Linux 操作系统,还同时提供官方 HAL 库,用于支持基于 RTOS 或无 OS 的项目方案,即裸跑应用程序。; u/ K0 P% v7 p

! H8 ]5 k' C) G7 u% S/ i
本应用文档将就以下几个部分简述如何在 STM32MP13 系列 MPU 上开始无 OS 项目的开发:
' W$ `1 [# M6 g& P/ D, ]• STM32MP13x Baremetal 开发环境简介
# F9 u2 `% L3 P; E2 [! g• STM32MP13x 工程的创建
6 S- s4 {0 C! _/ y+ r" E4 h8 h• STM32MP13x 工程的在线调试, \" F! o3 N6 X# `0 o. Z
• 镜像烧录及从外部 Flash 启动
- o$ P4 P- l8 `. M& U
: v, B9 g* o% K
02 STM32MP13x Baremetal 开发环境简介# F+ W! g( ]  a: t7 g. {4 ^4 F5 w
2.1 开发工具及环境
  i$ ]/ \3 y) e) C3 \+ H) Y# RSTM32MP13x Baremetal 开发工具主要包括:
' X5 D4 l! p9 L+ d0 s2 G1. 烧录工具:STM32CubeProg ( 版本大于 v2.15.0)2 M& x6 c" W2 @, j
2. 配置工具:STM32CubeMX (版本大于 v6.10.0): t. R! @. L4 c2 f+ F2 A) h
3. 开发调试工具:IAR(版本大于 v9.50),或 STM32CubeIDE(版本大于 v1.14)' w  K9 Q* F# h& C! `# c5 X2 h
本文示例基于 STM32CubeIDE 开发调试工具。
9 Z1 @2 I- j! y+ y3 `1 x. `8 ^( j* d5 T4 K" ~

+ X9 ^* J/ m! J" z5 v9 J, e2.2 STM32CubeMP13 开发包
! @, I3 `1 s# N  l; l' D  ]9 |+ TSTM32CubeMP13 开发包同步发布于 ST 官网 www.st.com 和 github.com,可通过如下方式下载:
! m5 s6 i1 N+ q9 W) d3 D. i- N1. ST 官网下载链接0 R2 X% T7 B% E. d$ Y% U3 d7 k
2. Github 仓库链接0 P8 |# L0 D: \6 M7 q6 K! v& A
3. 通过 STM32CubeMx 软件下载1 t) U" r- M3 x7 s
. E7 ~0 f) k. A8 b2 ^
2.2.1. STM32CubeMP13 开发包总览
' D2 {( q, p" W1 zSTM32CubeMP13 开发包运行在 Arm® Cortex®-A7 处理器上,由以下三部分组成:
8 Z7 n" v) X& D9 }( C9 ?# Z8 f• Level 0:驱动程序,包含 HAL、LL、BSP、CMSIS
  P9 e6 d8 L) X2 q  M• Level 1:中间件,包含 Eclipse ThreadX(原 AzureRTOS),USB Host & Device 库+ B, P, g9 C8 R! \4 Y& F" v) z7 T
• Level 2:包含各种板级示例程序, d6 _. W0 v% x9 ^0 F; y5 S
除此之外,还包括一些工具助手等。$ J' x# G& U* q/ U% \$ h
* \8 L8 h+ V" Z% V4 _9 p+ w
5 T4 a$ u6 X0 o( B
1.png 4 R6 A" N3 W7 ^" L9 ?
▲ 图 1 Baremetal 开发包源码框架
% z4 W3 y; l3 U1 @! A5 _' i, Y9 R4 [+ j9 E
* S% V: X0 |! b4 `, ~; [
2.2.2. 源码目录结构# k# \% j, _; S. [: u4 ]1 z
2.png 4 \7 T8 @" J0 ^' y1 Z/ g) Z+ \3 i
▲ 图 2 Baremetal 开发包源码目录" i6 n. W9 Q' J( |7 m
. E1 W) O0 f# O5 s9 p5 j
2.2.3. 开发包支持模块列表; P9 d0 G: z3 n. `* ]4 r, {4 \) }
已支持的 HAL drivers :! E+ t8 q, ^9 q
• 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
) A! R6 h$ ^7 b  w5 a2 Y9 O
4 Y8 ~% V$ C# E: @/ q
已支持的 LL drivers :) P: m( @; ]2 y, O' D! U$ F: z( Q
• ADC, DMA/DMAMUX, EXTI, ETZPC, GPIO, I2C, LPTIM, MDMA, PWR, RCC & BUS, RTC, SPI, TIM, USART
8 O2 M9 o: B/ z! S5 y1 N6 X! t
; G+ {6 m$ S/ W. X
BSP 与 BSP 组件:! N, N! Q) M, c; K. J! B
• 基于 HAL 封装了更高一级的 API,为 LED、按钮、相机、LCD、SD 卡和 COM 端口提供 API,包含了以下一些外围器件的驱动:GC2145, LAN8742, MCP23x17, RK043FN48H, STMIPID02
0 L4 s' z5 M# K4 V3 |
# K; \, k4 N% d
中间件程序:
, C5 b6 N# |+ L* C7 ?) ]8 |• 包含一系列支持某种服务的库文件及接口文件,目前已支持:Eclipse ThreadX(原 AzureRTOS),STM32_USB_Device_Library,, B( [2 i( h4 R  A+ q0 X1 Y, ~0 w$ }
STM32_USB_Host_Library
! X4 J& ]* V  ?2 J. W) x& Y3 T8 w' i8 k; J
项目工程:
9 @, T5 M6 I1 ~8 T0 Y• Examples:基于 HAL 接口的简单示例,没有中间件功能。
  x9 y! G/ ]4 {% l• Applications:较完整的工程应用实例,包含中间件功能。
0 b8 g( [& K; v6 V( L5 h• External_Loader: 烧录镜像及从外部存储器启动的应用示例。
' H4 C/ d& J; X7 S" S3 ~2 T3 c• Template: 板级工程应用框架。( m- G0 e- ~  h2 L
0 S2 r9 l7 x* v
实用工具:
% x( f8 L$ \! \* w8 ]5 X• Imageheader:用于添加 stm32 头,支持存储设备启动。
* R) Q4 Z  ?: _9 w  V& B. S• Fonts:提供了一组用于显示的标准字体,包括 font8,font12,font16,font20,font24
" z; g8 ]% V% X1 n3 H, p0 X: Y
- }9 _5 y2 h0 w6 [- [5 h2 s

' E- D7 A/ q  b8 X5 L. Z' ]03 STM32MP13x 工程的创建+ c, b, M  Q5 [/ p% \
STM32MP13x 工程创建,可通过以下两种方式:3 |/ |" q3 g+ |0 T- |* b" d" ]( R( y
1. 使用 STM32CubeMx 配置并生成项目框架代码,并基于该框架代码开发应用。
: l" z. c3 T1 x/ s2. 导入 STM32CubeMP13 开发包示例工程代码,并基于该示例代码开发应用。
! H0 `* n  o; r" Y% x% H& w, M9 L# y1 H
3.1. 从 STM32CubeMX 创建工程, n6 f$ f; I0 ?- f$ H
STM32CubeMX 是 STM32Cube 工具家族中的一员,它采用简单易用的图形界面,可以帮助开发者快速配置硬件和软件。可支持从 MCU/MPU 选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置等,并可生成适用的 C 代码项目。; f) E: l+ o+ b' Z$ s
. r" c7 @: y& a4 S/ u0 L
本章节简述如何通过 STM32CubeMx 生成适用于 STM32MP13x 的裸跑应用框架。使用该方式无需提前下载 STM32CubeMP13 开发包,STM32CubeMx 可自动联网下载。8 E% A4 v/ b: g" f* G* ^$ f
1. 打开 STM32CubeMX,点击 ACCESS TO MCU SELECTOR,1 g0 _/ |; c9 {  p# A: G. U: l' y
2. 在搜索框中输入 STM32MP13 相应料号,如:STM32MP135FAF7,双击打开配置窗口
6 C+ E3 d" u3 X% C2 b, r3. 弹框选择 MP13 Bare Metal,将生成 bare metal 工程框架。% ?5 u4 X, h5 W& [' z0 N; O
3.png 1 F0 Z5 r7 s; z7 V% |0 e) g, X

2 h  g/ ~# ^; V8 V& e' ]$ J▲ 图 3 STM32CubeMx 选择器件
/ W1 _7 Z3 h6 a2 |! @8 s% i 4.png
6 E, ^9 T- e6 |; q$ s

% S0 v+ e* N. \2 K9 c. r9 W( M* V▲ 图 4 STM32CubeMx 选择工程类型
9 }( N  e) h3 n! @! ]9 \/ D" A* y

& F" @7 w/ b" ]2 G4. 切换到 Project Manager 标签页,输入工程名称。  g& D" P0 C0 I7 @3 F
5. 在此页进行项目选项配置,可保持默认。& O. N5 h. Y% f
5.png ! J; D& W* u1 x) a- }& Y

3 L( h2 y5 S/ P+ k" h( U▲ 图 5 STM32CubeMx 工程设置页面  D$ k0 `1 O* E! o. f* T9 ?

- e- J" }/ V! y0 U* i

& @( Q/ g- Y$ p0 n; x/ m! v( P6. 回到 Pinout & Configuration 标签页。
9 x, e3 G. F! c8 Z9 v* ?7. 使能 RCC 和 DDR。, d7 U+ \$ }$ ~3 T3 W7 W: e9 A) l
8. 配置各外设总线,配置方法与其他 STM32 MCU 相同(也可参考 Help -> Docs & Resources)
( _( z3 {. \7 G% v/ `0 C: @+ [+ z3 a( E$ P% x

* v" V8 v4 d1 j/ O7 y: Q6 t
. u: x6 l! F/ d$ L
6.png ' O6 }! B6 ~' y
% g$ A4 F0 {0 g  T
▲ 图 6 STM32CubeMx 外设配置页面3 H  A# H$ L& c. k: ?

( a2 j" r* X7 r% M: d  V
7 \  B( D0 i2 a3 D
9. 切换到 Clock Configuration 标签页。% b# w* Q( k3 v
10. 若软件报告时钟错误,可点击 Yes 自动修复。
: K0 L0 `. p- H3 L% E11. 输入 CPU、DDR、总线等的工作频率,系统会自动匹配合适参数。. B8 C* J% M; _: Q7 D# Z/ u/ l
6 B6 e" g& b* Y; ^/ V
7.png 1 ~# c) j% e/ ]3 p! k4 ]
▲ 图 7 STM32CubeMx 时钟配置页面5 k6 c- t; @- V7 r) D1 X

% e/ }% w- n% d; c9 O" f: }' U4 l

$ ?4 _( p( y" Z$ h& Q& ]12. 所有外设配置完成,即可点击 GENERATE CODE,开始生成工程代码。
- M0 r0 e1 n6 P13. 若第一次使用,软件将提示是否下载 STM32CubeMP13 开发包,可点击“yes”,软件自动联网下载前述 STM32CubeMP13 开发包。" z. z2 q, O6 m
14. 生成完成后,可直接点击 Open Project,将打开 STM32CubeIDE 工程。
% L9 e/ R4 A, n& J" P* I# J 8.png , B; n! y# m) i- B. I

2 z' \# u5 W: ]- K▲ 图 8 STM32CubeMx 代码生成页面9 A  V% g+ [8 d0 v! n
9.png
* ], J% [4 u- }2 i
▲ 图 9 STM32CubeMx 完成代码生成页面
& R+ H" q6 @" Z) J 10.png - c- Q& u9 G8 p1 R8 V! E
▲ 图 10 STM32CubeMx 生成工程代码示例
$ \* a& ~. l5 K7 R9 p
  @1 Z8 H0 h, t/ y
15. 至此,工程框架已生成,可通过 STM32CubeIDE 进行用户代码的编辑、编译、调试。
/ s  C" u6 I, \8 w3 y5 F  V  H) @1 `7 ]  P3 V4 G* p
9 N8 z- ^2 ~* O8 z- J8 \# r! j/ j
3.2. 从 STM32CubeMP13 开发包导入工程
; F1 c  Q, D% A3 r# C; a, f若已事先通过 ST 官方网站或 Github 下载了 STM32CubeMP13 软件开发包,也可导入开发包中的工程示例代码,从示例代码开始进行项目开发。6 q( \% a) g2 I' S  P- K

3 c3 r& s' ?4 p# B5 d" s
这里以 FSBLA_Sdmmc1 工程为例。* F2 m( s9 ~) u0 f
项目路径:\Projects\STM32MP135C-DK\Applications\FSBLA\FSBLA_Sdmmc1
9 T7 a3 O, g" c% S" J1. 打开 STM32CubeIDE,导入 project0 X( `; w6 O. I5 A3 Q5 t+ G7 K
2. 点击 Files -> Import…
' r, `, H9 V* a: d8 \' e0 a4 u1 ` 11.png ! s& R+ ^3 c$ H' D) H/ h
▲ 图 11 STM32CubeIDE 右键项目菜单! Z# _1 o2 o$ @/ E, h0 ~; ^
! F$ n. j' _& ^2 _, a& N! g& V

) |/ Y( @4 {. G6 w$ Y, Z. y, A! E3. 选择 Existing Projects into Workspace0 E: F, B0 ~" R! r. z- H; l
4. 点击 Next>
# [9 S/ z3 ~& n8 g 12.png : ^* z2 b- r5 M8 c0 ?

+ ^! X/ y7 S# g  L* ]! H▲ 图 12 STM32CubeIDE 导入已存在项目% j! H/ B, F# J
  s9 _& ^# w* G7 ^/ T% ~

# Y0 N8 l2 V+ u- I5.点击 Browse…,找到目录 \Projects\STM32MP135C-DK\Applications\FSBLA
3 [0 p( T% D& Y- a: r& O6. 选中 FSBLA_Sdmmc1_A7 工程
/ ?4 W- F  Y+ z" w- {7. 点击 Finish,导入 Project; L% F0 {9 z; D) W" l' q
13.png
* |4 e+ B" r! k( R

" ]: _- e& M$ `& @6 d▲ 图 13 STM32CubeIDE 选择导入项目
; f5 u% E$ }, x& n4 Y9 X
/ @! k$ ?+ e$ f( r' X
$ t. B+ F2 f- z% z" F* Y  V* D8 V  N
8. 工程导入完成。
* O& I) p$ z7 G$ e# {  P
# M, b) i* B* Q7 t! H- ?% |
5 q$ T0 }, A6 G2 X% g8 D) j2 w
04 STM32MP13x 工程的在线调试
9 H1 v/ G# T; H8 N& U6 y工程创建完成后,接下来本章节将介绍如何基于 STM32CubeIDE 进行工程编译及在线调试。- B  ~2 D) v( D/ \( ^  g

/ U5 g- B# [. u6 U
STM32MP135 内部包含 128KByte SYSRAM,若代码小于 128KByte,可直接运行于内部SYSRAM 中,适用于验证一些简单的外设实例。若代码大于 128KByte,则需要将程序运行于DDR 中。下面将分别阐述。  V, w! `9 `" |) Q# Y

+ M0 x# d- b5 }; }# a6 B4.1. 在 SYSRAM 中调试程序$ p, R0 u! E/ u3 g
仍以前述导入的 FSBLA_Sdmmc1_A7 工程为例。
2 V% ?8 L" e# ^, j, v1. 首先,将开发板切换到工程模式9 `/ }) J& O8 o0 l$ w1 J' C- N
2. 连接 Type-C 电源3. 连接 MicroUSB,这里板载已支持 ST-Link
% F3 U5 C# ]# h, ^# j2 D 14.png - G$ \3 ]0 d9 h# G6 w* x
0 e0 e7 L$ k, k8 M2 `" m
▲ 图 14 开发板切换工程模式
) V7 \/ q% p" A4 {& s. f4 ]% P& M
  n2 c7 x/ E2 K- i
4. 右键项目工程名称,选择 Build Project,完成编译。
+ k/ {+ B) s% [. A 15.png
  X' B3 r& E% D& ~- F

2 o! F- p5 R! t0 Y9 s: j▲ 图 15 选择编译工程
9 G5 r3 {( P5 i: u; r; G' `+ z/ J: ]8 Z  |! P& p
; Y8 c5 T  F1 @! A" f
5. 右键工程名称,选择 Debug As -> STM32 C/C++ Application
# J, {- A5 s2 y0 [$ H6 I 16.png
6 b) c+ \8 c$ `  u, u4 J

5 ^# s& |" P& d$ Z) O3 J▲ 图 16 选择调试项目方法 1
- P8 z+ n0 T( Q8 e" A+ ~  @: d+ v6. 或点击 Debug 图标6 {! e0 K# r8 H& Z* j2 W
7. 进入 Debug Configurations….' m2 ~: W( e; ?' F
17.png
' i- \1 y4 r; d& g! A) d

2 v+ ?+ ~8 V5 }3 V; q& S& Q( o& s6 J▲图 17 选择调试项目方法 2; e+ W/ l9 ~  X

' }& `* u& f  V0 V" R, w% y' E
; o! i% `( r# z: n0 M+ ?
8. 进入调试配置菜单
/ K+ v9 K/ r3 f5 s' | 18.png % A$ t7 Z$ j  i

9 g2 N! O- _: `4 j( o0 I! s▲图 18 调试配置页面
/ _7 B. b( T& L- i0 y7 r7 X* ^, y: p  m/ t0 @* W+ F
+ _- {: ?& d+ W, ?
19.png . g8 R7 Y; p) I+ {; J* A
5 {0 p9 X# p( x, n
; Q0 u) f8 k5 l  s8 ~2 M
5 ?/ M4 `5 N( s; J2 y( {
9. 即可像 MCU 一样调试您的代码。
9 R: F) l7 _2 ~; Z 20.png
9 ^2 V/ `/ x9 I6 Q; B$ y  t
6 s; @1 B/ H+ O8 g% ]
▲图 19 项目调试窗口
1 y' @8 F0 ~7 @& a# b6 x8 }: }" W2 A7 J, {
4.2. 在 DDR 中调试程序
: e; [2 Y- `- {3 D0 q7 _! [当代码量超过 SYSRAM(128KB)的大小时,需要将程序运行在 DDR。这里以 BSP_BasicTemplates 工程为例展示如何开发运行于 DDR 的用户程序、3 t5 M: R" u9 _# a9 x! k' m; R

  [( Y  l( T3 y5 k+ i1 I
1. 首先,按照前述方法导入项目工程
6 c9 w! J1 G& Y# u 21.png - w2 h# Y( o( Z9 ~  R2 d

* T6 C5 X4 r) h7 G+ Z) M▲图 20 导入 Templates 工程
. ~: R" y- i7 B& Y! g% \0 D8 ?. D& l& @# S3 L# G- n1 \- M
* N' p9 i  a8 |5 a
2. 打开 C/C++ Build 配置
# [/ @8 g/ N( `# m7 _  y- H3. 在 Preprocessor 中添加 USE_DDR 宏定义: j/ S7 T+ j( G/ D+ f
22.png 1 s# f: p9 j0 u( @2 y' D. X" u1 x4 W
+ I; `. O" A. i9 P8 B& H+ ^, w
▲图 21 使能 DDR 宏( C" v0 n; u! f+ z3 H  t

- L. Q( e, A5 ^, W

5 P# Z) w' b) w" w/ A( `! R$ G4. 修改链接文件,重命名为 “stm32mp13xx_a7_ddr.ld”
8 \/ W7 @5 }! |% ?5. 修改 REGION_ALIAS 定义到 DDR 区域:
1 s4 P& G2 K+ R) }1 G2 Y$ X6. 重新编译后,目标文件将链接到 DDR# I; b. n  ^5 a  ~; [, k
23.png
- _( L  K+ S# V. r2 K

7 l* u7 O/ t, v5 h: s( u, V$ y▲图 22 修改链接空间
( A3 g  P) P5 e 24.png
9 t' |' d1 A- ~) N7 K

$ G1 Q5 o# A/ s' o▲图 23 选择链接文件# k, r7 R; x$ H; c4 {9 x* _8 R
: V" e6 d$ V0 d/ A
7. 在调试之前需要先运行 DDR_Init 对 DDR 进行初始化0 E: J& b* v# D, b" k8 h1 @7 f  j, M
8. 按照前述方法导入 DDR_Init 工程,编译后全速运行一次,并保持开发板不掉电项目路径:\STM32MP135C-DK\Examples\DDR\DDR_Init' V5 n- o  }' |1 x0 l% m4 w
25.png 1 [7 R8 \! h! D7 V) P# n
/ \+ c! V3 b3 Z8 D: C
▲ 图 24 运行 DDR 初始化; n1 s4 v: ^1 u# i

3 R! t5 |1 E3 W

$ G5 ^' ~- f  i& T$ o4 O* s4 T6 y9. 回到 BSP_BasicTemplates 工程。
* k( D5 ]# Q& T+ U. v& k10. 在 Debug configuration 对话框中,将 Startup 页面的 monitor reset 删除。
% R/ @/ C+ S2 b) t 26.png
" ~2 s. U' w0 l) `; |/ r

2 Q+ \3 I7 u' N( B* a▲ 图 25 修改调试参数
  Y( o; w! s* B
# Z+ _) F9 j$ R, u# s# S4 n# W- t
6 G3 {; x8 {+ l
11. 点击 Debug 进入调试. v$ w2 ~: L$ c  L/ E$ t1 Q' F
12. 可以看到当前 main 函数的地址已经为 0xC000 开头的 DDR 位置% F1 @1 G3 R4 z; c+ |+ @6 ]$ }8 o, C9 \
+ @1 S+ f6 F% F
( A% _& `: B; j7 `/ L
27.png 4 {5 X/ R# |7 V' L6 m5 N
2 P- e! \) D. V9 _
▲ 图 26 在 DDR 中调试工程
4 l: P9 o9 \. h* C
9 m" f) G! \% F0 b; U) G, d0 G

1 U4 ]. b8 w, Z: S6 @0 J2 _05 从外部 Flash 启动0 _$ q+ l9 A5 y% z. E
28.png
& g. e5 c) [, ]( q' A2 q
# Y8 j1 M$ l8 V9 K! z
▲ 图 27 STM32MP13 启动流程1 N9 N/ b7 m0 t' D3 e! G& E. [; b
* M4 Z) G. u8 L" M
从外部 flash 引导 STM32MP13, 一般需要包含两个部分源码。如上图所示,芯片上电后,首先运行内部固化的一段 ROM CODE,ROM CODE 从用户配置的启动器件中寻找 FSBLA,并将其拷贝至 SYSRAM 中,FSBLA 运行后,执行 DDR 初始化及用户代码(CUBE EXAMPLE)拷贝到 DDR 中,最终实现跳转到 DDR 中运行用户程序的目的。
  n( z1 K+ _  V5 }2 V  O+ o( _1 H* r' ~3 m+ ?! j8 ]6 j
这里以 SDCard 启动为例,在第三章节中,我们编译调试的 FSBLA_Sdmmc1_A7 工程,即实现了 FSBLA 部分的功能,BSP_BasicTemplates 工程为实际开发的用户项目。完成启动需要将这两个工程生成的镜像文件都烧录到 SDCard 中。0 N# o) r& c& w7 i, N! V
1 y7 d1 A% I+ r4 l6 ?
• FSBLA 需烧录到 SDCard 的固定位置 LBA128 或 LBA640,ROM CODE 固定从这两个位置寻找 FSBLA。' K. T: g9 f# a; l6 b5 e
• CUBE EXAMPLE 的存放位置可在 FSBLA 程序中修改,默认为 SDCard 的 LBA640。
8 P/ n1 A9 T- H+ h9 d0 [' z/ H• 如果有烧录过 OpenSTLinux 的卡,需先格式化。原因是 ROM Code 优先从 GPT 分区表中寻找 FSBLA,若分区表存在,新烧录到 LBA128 位置的 FSBLA 将会被忽略。1 e- X% s. S; i, F& N2 X$ E# U1 I$ b5 n( n2 Y
29.png 1 Q5 \+ b4 S$ P# {& c2 m/ x: J. i
▲ 图 28 镜像在 SDCard 中的 Layout5 R$ B4 J  l% D' H$ D  R
; H6 j6 ^! R6 k6 l" |7 Y  {
需要注意的是,FSBLA 和 CUBE EXAMPLE 都需要加入 STM32 Header,才能被系统识别。STM32 Header 是 ROM CODE 加载二进制文件的必要格式,每一个被 ROM CODE 加载的二进制文件都需要在头部添加特定的 STM32 Header。STM32CubeMP13 开发包中提供了ImageHeader 工具,用于为项目二进制文件添加 STM32 Header。开发者不需要深究 STM32Header 的详细内容。
1 a% c  A. x- @' V7 A/ }! v 30.png
5 G+ X% W  i8 e$ b
▲ 图 29 STM32 Header 信息
  e5 J) ~& d$ d9 `9 [# Z" m: w" _- S' s# v9 C
为用户程序加入 STM32 Header,可在工程配置的 post-build steps 中加入如下命令:+ ]- A4 y: A( q% w! G
“(path_to_STM32CubeMP13/ Y/ R7 b  X( P! C3 x# _
Package)/Utilities/ImageHeader/postbuild_STM32MP13.sh"9 A. M. k9 Q/ g# r
"${gnu_tools_for_stm32_compiler_path}"
/ X- d. u" l9 C( q# i9 d"${BuildArtifactFileBaseName}") }& g: P2 ]1 \3 {

6 N2 a3 _# k- P; g  {. w

& h& q' F7 M0 E7 R4 d3 X6 [重新编译完成后,即可生成打上 STM32 Header 的目标文件。# Y  o. N: p7 O% ]) Y
31.png & E+ D' ~- \3 n/ n. s. |
▲ 图 30 添加 Post-build 命令
' }# h6 _* S0 R5 {9 B9 p, P# h
注:path_to_STM32CubeMP13 Package 为 STM32CubeMP13 开发包的存放路径。2 h0 S3 N+ U& d

" I: N$ a0 ?1 n
至此,已准备好待烧入 SDCard 的目标文件:" e7 g9 F5 h* e, [
1. 已添加 STM32 Header 的 FSBLA_Sdmmc 目标文件:FSBLA_Sdmmc1_A7_Signed.bin (即 FSBL)
0 P" O+ U6 Q. U# w2. 已添加 STM32 Header 的 CUBE EXAMPLE 目标文件:MP13_BSP_BasicTemplates.stm32(即用户工程)
& e  U  n; V4 e+ [
: R! S' {% T) A8 {& _; c) K' o. F
烧录工程位于 STM32CubeMP13 开发包的如下目录:
; M2 D3 g% z0 \9 K\Projects\STM32MP135C-DK\External_Loader,以二进制的方式提供了烧录时需要的两个引导文件,包括:
+ H7 v! k4 Y1 ]! _- u/ @1.STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm321 o  ]+ F2 D8 g. ~4 B7 M& w
2.SD_Ext_Loader.bin其中,STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32 为基于开源工程。4 J! L8 _2 S) P' p: v& f
* x) `& m% p2 D, a

2 q+ g( e9 c$ w- c: ~% dOpenbootloader 实现的一套 IAP 应用,执行烧录流程管理。SD_Ext_Loader.bin 工程执行SDCard 设备的实际擦写操作。% q5 A4 J. D' x3 B9 o
( ~  I# ]0 u- D* X  J
9 W# I9 e1 I0 H# F" r6 h1 D
目前,引导设备可支持 SDCard,QSPI NOR FLASH、EMMC 等,若项目开发中需要修改适配不同的存储设备,可联系 ST 窗口获取烧录工程源码。
9 ~% q; p- M2 E# {* F8 [  J" O3 K$ j" }* f: ]( }& A
将需要烧录的两个文件拷贝到 External_Loader 目录下,与烧录工程的两个文件存放在相同位置,然后修改 tsv 文件。完成后,目录中文件列表和 tsv 文件内容如图所示。/ \. _. D. ?& J: q/ }# I
32.png ! O2 J7 k8 ]0 i$ @$ z; c4 k
▲ 图 31 烧录文件列表
$ `9 {5 }# m! n* K3 X 33.png
" W/ I+ \6 D( I
▲ 图 32 tsv 文件内容
1 P* }3 I* m6 g( j
* B! N: c& f$ I& S* k8 v
) y0 F. c5 o+ r6 d
接下来,即可使用 STM32CubeProg 进行镜像烧录。可支持通过 USB 或 UART 连接,不支持通过 ST-LINK 连接。这里以 UART 连接为例:/ I* m  l6 U! ^
1. 开发板跳线设置到 000 并上电
! Z' x$ M- t' u1 K+ r' g2. 连接 MicroUSB 口,查看 COM 号。注意通过串口连接时需要断开 USB OTG0 V/ \4 y$ V0 w/ m* m% s" r
3. STM32CubeProgrammer 选择连接方式为 UART,选择相应 COM 口
' ?3 v5 W9 \* W6 r# ?4. 点击 Connect 连接
( W# I# T) |' D, Y5 F 34.png , S; y# z# g7 S+ j- y" T/ D9 y

2 `5 ?" M4 `$ |0 I; G, f 35.png
& B! y' F9 f$ n' L4 B% i5. 点击 Open File,选择 FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件
+ l4 @( P) Q8 z" V6 t3 F: h6. 点击 Browse,选择目标文件夹:\Projects\STM32MP135C DK\External_Loader\SD_Ext_Loader% b1 ^5 n6 Z( `0 f# j& d* s
7. 点击 Download,开始下载镜像' t/ T) v) s9 \, S) W, B
36.png   E/ h' T! s8 e# V# p: j$ b$ A9 {

7 w4 s+ s$ V1 n5 l 37.png
' h; d! [9 j7 k+ Z: Y& l" n6 |
0 g. J$ y- k! L5 u, m0 b2 v8 r8. 等待烧录完成
: ^5 o" `2 e( \0 i% g8 m' Y9. 将板子断电,boot mode 切换至 SDCard 启动; C" U) {/ q; ?- J7 o$ r  U9 G8 Z
10. 重新上电,即可引导启动! h1 w% C, [) E$ V- l8 K
38.png
/ g' `4 Y: [! ~. S8 j
' c6 F: I  ]4 @  R) S1 S; U+ K转载自:STM32
9 T' K; i' g# e; b; ]0 a  f9 d. D! }' U- t
, Z4 l9 G4 Y! g( s! F% B+ D6 g
收藏 评论0 发布时间:2024-11-22 19:09

举报

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