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

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

[复制链接]
STMCU小助手 发布时间:2024-11-22 19:09
01 引言; s7 q% A9 b+ j5 P6 N9 L9 k3 B; f
STM32MP13x 系列 MPU 是 STM32 Arm®Cortex® MPU 家族中的一部分,它拥有单核Cortex®-A7 核心,支持核心频率 650MHz~1GHz,不仅能够轻松运行 Linux 操作系统,还同时提供官方 HAL 库,用于支持基于 RTOS 或无 OS 的项目方案,即裸跑应用程序。5 p3 j! ?# L; J2 Y. m  K- S# _
% R4 I3 q  C; u6 }; E; b, ~; I2 d
本应用文档将就以下几个部分简述如何在 STM32MP13 系列 MPU 上开始无 OS 项目的开发:! q8 L; Y1 U, q
• STM32MP13x Baremetal 开发环境简介
( p3 m# ^6 ]# y- X• STM32MP13x 工程的创建
7 |- H4 b) m) K9 S) ?5 B5 ~" }7 L• STM32MP13x 工程的在线调试
. G; b5 |: W) v• 镜像烧录及从外部 Flash 启动
) Z! h7 h$ _1 Y% S& Y
2 i! I! e7 C1 C6 _  D3 _; w( ]* w
02 STM32MP13x Baremetal 开发环境简介
: c3 S# ?9 _5 `, X, m; A2.1 开发工具及环境* o: K* q* |0 N4 S4 z
STM32MP13x Baremetal 开发工具主要包括:  K/ K  y4 v* K0 {% f" c- I& S
1. 烧录工具:STM32CubeProg ( 版本大于 v2.15.0)- l$ c7 J* j1 c, |# U! Y8 [
2. 配置工具:STM32CubeMX (版本大于 v6.10.0)
4 n( i) Y8 E. q/ g. g9 B1 p3. 开发调试工具:IAR(版本大于 v9.50),或 STM32CubeIDE(版本大于 v1.14)1 v9 X4 l8 p# V9 H
本文示例基于 STM32CubeIDE 开发调试工具。
; E: l2 e2 {! i9 n- P* Y8 t/ S" U. @: E

' Y: S6 w* l; U; g" j2.2 STM32CubeMP13 开发包! S4 D" T4 G# i7 x. `
STM32CubeMP13 开发包同步发布于 ST 官网 www.st.com 和 github.com,可通过如下方式下载:
7 a2 E1 [5 D3 Y1 F1 t1. ST 官网下载链接5 ]( D9 b  f$ ]9 K( f! @2 `
2. Github 仓库链接
! {0 L2 p4 p7 E$ @3 Z3. 通过 STM32CubeMx 软件下载( k" {4 K4 m* Y) y4 @! d+ g' Z: u
$ N/ l% {7 H# ]- v6 g) y
2.2.1. STM32CubeMP13 开发包总览
0 u/ ?! n+ k; x. DSTM32CubeMP13 开发包运行在 Arm® Cortex®-A7 处理器上,由以下三部分组成:: J- b" L, G- y7 C3 K8 J& b
• Level 0:驱动程序,包含 HAL、LL、BSP、CMSIS
" r" y4 D" G7 h1 v; s3 @+ |• Level 1:中间件,包含 Eclipse ThreadX(原 AzureRTOS),USB Host & Device 库
# U! A. Y  q& u( q• Level 2:包含各种板级示例程序* u* m5 s1 I2 ?% L; R( D7 ~9 ~
除此之外,还包括一些工具助手等。2 K# o2 f) _" Y& _- W. S  Y/ G

( w4 ~! d6 h( Y9 t$ W# z
, g3 G! h/ M, o
1.png
% w' K1 \* S6 e& y4 Y
▲ 图 1 Baremetal 开发包源码框架  C5 E" W9 m; |* X4 j$ h; z, |" j  n

% [( r0 H( @+ k% f! D) l$ U9 ~, }. X4 J
) _6 D3 f$ H6 E- |- I8 W: W
2.2.2. 源码目录结构
( J& n  D; }2 L) } 2.png ) s0 ~* R/ V% K
▲ 图 2 Baremetal 开发包源码目录
5 ?# Y" \7 M. I* `7 j
- f7 V6 O8 Y. |$ r; Q- w% m
2.2.3. 开发包支持模块列表
9 m6 L. d' T" p1 g; L已支持的 HAL drivers :* U$ _5 h8 B6 ?" d
• 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
( Q3 d- o! z' G" g
( C$ Y' m7 a. R& O- s. }& r
已支持的 LL drivers :; h- D" j  G$ t$ u" l3 W) ~, T
• ADC, DMA/DMAMUX, EXTI, ETZPC, GPIO, I2C, LPTIM, MDMA, PWR, RCC & BUS, RTC, SPI, TIM, USART' D  I3 R  r- d0 w6 V

" j/ a( Y- m) Q1 J' X
BSP 与 BSP 组件:
2 ?6 p. r0 [; t+ ]# G) }' O- P) J• 基于 HAL 封装了更高一级的 API,为 LED、按钮、相机、LCD、SD 卡和 COM 端口提供 API,包含了以下一些外围器件的驱动:GC2145, LAN8742, MCP23x17, RK043FN48H, STMIPID02
- I7 F7 I: T7 z* N9 ^
7 j$ d3 w- S( Y/ d: B- I& n9 V# j2 p
中间件程序:( W& p- K) ~4 X: @0 k, ~4 N
• 包含一系列支持某种服务的库文件及接口文件,目前已支持:Eclipse ThreadX(原 AzureRTOS),STM32_USB_Device_Library,
, r  g) {1 f) q$ ESTM32_USB_Host_Library1 J7 y9 X" D7 Z8 a4 ~0 p: ^; m

* B0 w9 U7 W' n3 n, b5 l0 |, ?7 n5 W
项目工程:
1 J" B+ i' G" {( E, F8 H5 X• Examples:基于 HAL 接口的简单示例,没有中间件功能。
+ }' d: J8 `+ F3 F! m" t• Applications:较完整的工程应用实例,包含中间件功能。
) G6 A! D/ A, f: j• External_Loader: 烧录镜像及从外部存储器启动的应用示例。
3 X0 X: _+ e) A6 N4 U6 }• Template: 板级工程应用框架。& ^: q8 Z( [1 j, l4 b6 z

! A* D+ u3 v. ~1 R, X, O' Z  [
实用工具:
! q" Z0 I* V% j/ e" M, j4 s5 {- p• Imageheader:用于添加 stm32 头,支持存储设备启动。3 f2 A7 C: ~" W- q0 X* b
• Fonts:提供了一组用于显示的标准字体,包括 font8,font12,font16,font20,font24  C2 c$ {3 s) z2 ?

! H% A8 |, z" n' w3 b
) l) N1 h/ O" t( e6 e& S
03 STM32MP13x 工程的创建
( R; @7 z- O% f+ a1 l9 H0 uSTM32MP13x 工程创建,可通过以下两种方式:
  F. |9 Q# M& D1. 使用 STM32CubeMx 配置并生成项目框架代码,并基于该框架代码开发应用。
! h: Z7 O, L1 q. S0 \2. 导入 STM32CubeMP13 开发包示例工程代码,并基于该示例代码开发应用。+ s- Y. E0 n, x4 u5 U, q  [

; V4 `7 |+ g- |$ b3 ?/ c, \+ l2 Q# @3.1. 从 STM32CubeMX 创建工程0 c( y! O: \0 k; T5 P
STM32CubeMX 是 STM32Cube 工具家族中的一员,它采用简单易用的图形界面,可以帮助开发者快速配置硬件和软件。可支持从 MCU/MPU 选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置等,并可生成适用的 C 代码项目。3 o5 f' Y+ `; G- k  a% _

+ C9 e! z/ f& i9 z
本章节简述如何通过 STM32CubeMx 生成适用于 STM32MP13x 的裸跑应用框架。使用该方式无需提前下载 STM32CubeMP13 开发包,STM32CubeMx 可自动联网下载。
- ?) t+ ~. g6 N) T4 |% T$ o1. 打开 STM32CubeMX,点击 ACCESS TO MCU SELECTOR,
( Y( e3 l$ p9 O2. 在搜索框中输入 STM32MP13 相应料号,如:STM32MP135FAF7,双击打开配置窗口
9 ?  @  n0 v+ [; F3. 弹框选择 MP13 Bare Metal,将生成 bare metal 工程框架。
8 y! p5 D$ j; v+ [" \/ P) c5 ~ 3.png
$ \5 z5 Q  q; {9 m2 t$ B
0 F6 M2 s7 f& Z2 g7 c( p; k/ W
▲ 图 3 STM32CubeMx 选择器件# m3 _* M# o5 y! ?/ s! i4 f
4.png ( n. T& F$ b0 r6 e1 |0 W' T

; Z- J: T! t8 n▲ 图 4 STM32CubeMx 选择工程类型
/ U# j0 e, E( G) E
4 G% Q8 `. Z) d- ]' W, V
& P+ k5 m( D9 ]2 s1 F* S
4. 切换到 Project Manager 标签页,输入工程名称。  q" r" o$ B8 e- K+ [) R
5. 在此页进行项目选项配置,可保持默认。
  ^, m  j- ~* \$ b 5.png
' ~& L/ y9 I% H' M9 A

) b7 o! W: G. g3 r: x▲ 图 5 STM32CubeMx 工程设置页面
6 e( {7 W8 w( k: s
2 l0 l1 r0 f, Q0 P

5 E- e* ?3 V% h- a6. 回到 Pinout & Configuration 标签页。, I: [7 s! S6 m3 c& \) Y$ Q- `( z
7. 使能 RCC 和 DDR。
) t9 Y/ N# j/ G. U/ O8. 配置各外设总线,配置方法与其他 STM32 MCU 相同(也可参考 Help -> Docs & Resources)
# ]; h, k' V7 X4 g/ H
9 `& N2 K5 F! ]- {( t2 D- d, d* H% {, \4 f5 H/ F1 E3 G8 @

7 \, d3 e- M# g/ k 6.png + |7 ^5 z& b' K! m* p

8 s3 A  T+ q1 k1 U. D+ Q- G▲ 图 6 STM32CubeMx 外设配置页面- e2 I/ u* s% b5 }
; p. {( U# v2 S. D, ^$ C; u

1 ]% i+ l1 a: c' {! T0 G4 S9. 切换到 Clock Configuration 标签页。$ i  J% z9 v, V: k) L, j
10. 若软件报告时钟错误,可点击 Yes 自动修复。
' I( @6 N/ t8 l! q8 S: e11. 输入 CPU、DDR、总线等的工作频率,系统会自动匹配合适参数。7 D( W: r$ I% F* M( j3 K

7 V3 B9 {0 y* t- s
7.png - ^$ o- n- f6 L" k: C) J5 d
▲ 图 7 STM32CubeMx 时钟配置页面
5 c: e3 q; Y4 a# B
. f& V3 c" [" k1 j2 ]' L8 M4 S. M

/ Q  q& s) e# q, w1 {5 a12. 所有外设配置完成,即可点击 GENERATE CODE,开始生成工程代码。' ~0 u) E1 A) d( n+ J+ w
13. 若第一次使用,软件将提示是否下载 STM32CubeMP13 开发包,可点击“yes”,软件自动联网下载前述 STM32CubeMP13 开发包。* u4 t! }4 z* {' @/ r; k1 y5 y7 j
14. 生成完成后,可直接点击 Open Project,将打开 STM32CubeIDE 工程。- Q2 l& S1 x# J* e; A2 K8 F7 z/ S
8.png - H8 t% h' V' G+ j0 _

, h! G: t1 d9 e% u▲ 图 8 STM32CubeMx 代码生成页面' v( }/ ?8 D/ G0 _6 T4 n8 e
9.png 8 i4 w, b' J6 a& H, A
▲ 图 9 STM32CubeMx 完成代码生成页面
; m9 e0 p1 X2 L 10.png ! {2 \% ~% S" g' L7 R! l6 P( C
▲ 图 10 STM32CubeMx 生成工程代码示例
; ^  m0 C* H/ i" S# [9 @$ {, s& a
15. 至此,工程框架已生成,可通过 STM32CubeIDE 进行用户代码的编辑、编译、调试。
5 w* ]7 f& H* W' _1 F2 e1 u0 c$ d7 t% p' ?- t

5 W3 e$ C( d7 O. z7 ]) K  ~5 \, z3.2. 从 STM32CubeMP13 开发包导入工程' w" P4 ]9 l. e1 l4 m
若已事先通过 ST 官方网站或 Github 下载了 STM32CubeMP13 软件开发包,也可导入开发包中的工程示例代码,从示例代码开始进行项目开发。2 G% n$ v2 J8 I. f4 d7 M( W
8 ~8 U3 [; S! J: B6 {# v
这里以 FSBLA_Sdmmc1 工程为例。
+ W) z9 F# L9 [. d0 E1 j; h项目路径:\Projects\STM32MP135C-DK\Applications\FSBLA\FSBLA_Sdmmc1
( Y# P, j' h; }  N- T4 t4 l) R1. 打开 STM32CubeIDE,导入 project/ m' J2 \( {# M4 e
2. 点击 Files -> Import…9 ^5 a  s7 h% h4 h: x8 X& @
11.png 6 B# z# S$ u) d2 c
▲ 图 11 STM32CubeIDE 右键项目菜单6 @$ F, W6 L4 s7 x3 T* p

! m; f- E4 Y( }& E$ w* B* I9 O& L+ O, M- s
: K- E+ R9 V. y8 G7 Z! G! P- k
3. 选择 Existing Projects into Workspace
' }) q9 o2 K0 a+ m% {, c5 o; P4. 点击 Next>, D# n( X" j9 p6 k8 a2 [
12.png
9 P8 z5 U1 l; A* E4 V  ]
# u. @5 y9 d- ~; l  Y* {
▲ 图 12 STM32CubeIDE 导入已存在项目6 v, g- q0 T2 z/ [; s$ o
6 E1 c7 y/ m. \3 e0 J6 @; l( \

5 J& x, w% f  @5 q4 _5.点击 Browse…,找到目录 \Projects\STM32MP135C-DK\Applications\FSBLA
$ W, ~! r+ K: _6. 选中 FSBLA_Sdmmc1_A7 工程
+ X) M' b$ {! X, f4 @4 }7. 点击 Finish,导入 Project
% y* q( \* x2 ~' X: c) z 13.png # o+ G5 a1 C3 ~$ j# O# W% Z, [/ R- k
4 E/ J# U3 m- j
▲ 图 13 STM32CubeIDE 选择导入项目0 z% v# z) ]' ^

+ E5 t' J9 I/ n# h2 V. B

4 l- E! Q) x' R+ w! F7 R! x7 J8. 工程导入完成。
4 P' y7 K1 u4 o& v7 ?; o8 o( M; ?0 U5 b8 R* D

- O6 E; q$ n6 c' \9 G1 d04 STM32MP13x 工程的在线调试* v: }6 j( ]* }; I7 M$ r( @
工程创建完成后,接下来本章节将介绍如何基于 STM32CubeIDE 进行工程编译及在线调试。
* g8 W% m# K% e2 S$ s5 ]6 p" F) a  X( |. a; b. o: H& x
STM32MP135 内部包含 128KByte SYSRAM,若代码小于 128KByte,可直接运行于内部SYSRAM 中,适用于验证一些简单的外设实例。若代码大于 128KByte,则需要将程序运行于DDR 中。下面将分别阐述。4 \- U  x, n! D# ]
. e: \7 @/ h3 J3 ~. R7 U- M
4.1. 在 SYSRAM 中调试程序
) H6 h( W$ M. @$ g* @仍以前述导入的 FSBLA_Sdmmc1_A7 工程为例。
$ v: z/ C- _) \1. 首先,将开发板切换到工程模式) R9 r0 y6 D, J" t9 f# [
2. 连接 Type-C 电源3. 连接 MicroUSB,这里板载已支持 ST-Link8 D1 H8 n5 _6 s* O
14.png 8 U. I9 j$ Z! y* `- k& @/ O

7 J! V0 B+ e3 L, u- d# o▲ 图 14 开发板切换工程模式
* T9 ~/ |- ^( a( j# I- f* A$ c8 g) e% |0 l8 e
4. 右键项目工程名称,选择 Build Project,完成编译。
! k& m* m( H% m4 s7 D4 } 15.png
7 _2 D! O3 `! @* ]
; s. g0 z  K7 r3 M
▲ 图 15 选择编译工程
- z1 D0 b7 {6 ^4 `$ C
/ F/ p/ ^/ a5 ?/ r

% T: x* q5 z  u. P2 l  l5. 右键工程名称,选择 Debug As -> STM32 C/C++ Application0 \1 I" L( M" `' t' B' m8 x7 A2 F
16.png 2 ]2 O% `) o2 H6 @' q
! L4 o/ l7 a$ l+ I( ~: p" Z2 B
▲ 图 16 选择调试项目方法 1  n4 @& v; ?% }, c$ F$ [
6. 或点击 Debug 图标
* U" U( ^4 q) [7. 进入 Debug Configurations….* [: }. b6 `  v( o
17.png 5 n( M2 r! n6 b+ p2 j1 |5 e

2 F5 X6 b% ~- g" Y▲图 17 选择调试项目方法 2" m. G$ e8 q/ G) F7 H/ {7 }; Z+ p4 A/ L
7 p# h+ z9 \1 H' Z  r) k6 L
7 w; t7 b2 t) F0 M6 u5 z
8. 进入调试配置菜单% L( `+ H7 k3 Z
18.png % m$ w: R" K/ |% K

6 s6 S! W7 P8 O- g' G* F- ]3 ?▲图 18 调试配置页面
) u/ G% z8 F( o) d
6 v, @  M) S. P8 C

" h- ~& q; ]0 { 19.png ' `4 a( \0 ~( E# ]) f3 E, b
( J& G( B0 e. N
4 A) V2 X  G' U. i. `

1 B3 Q( y7 g$ u+ L2 T- G( H6 s9. 即可像 MCU 一样调试您的代码。
. Y7 A6 A# y. I5 ^9 g 20.png " w: r. L: C( g( {

# B+ F  M% U$ Z4 }7 h+ N; }! V▲图 19 项目调试窗口* ^' f% |2 P) c+ q* M

. A  y3 Q* _: C3 e6 V  G4.2. 在 DDR 中调试程序; `2 }0 S& X* l+ o
当代码量超过 SYSRAM(128KB)的大小时,需要将程序运行在 DDR。这里以 BSP_BasicTemplates 工程为例展示如何开发运行于 DDR 的用户程序、/ |) X6 k/ f' w5 s
: X/ T5 b/ U- M$ C" Y0 a1 v
1. 首先,按照前述方法导入项目工程2 r$ i* W7 W  T  P
21.png
7 K' h& z8 _* v) u6 v/ U+ K

+ |* l  Y$ N1 M. Q2 i8 x/ ?▲图 20 导入 Templates 工程! K% H: P* B& S& P: |- S
2 x( Z( ~! ^0 w/ F0 K! Z

6 c" q6 @, a% k" J2. 打开 C/C++ Build 配置0 B' @% b5 c7 D! m
3. 在 Preprocessor 中添加 USE_DDR 宏定义, H+ p, X7 ~/ [, a
22.png + i1 ?. H7 N: T5 v/ |9 a  T

! O" t" z, c) Z% e" _: ]% q▲图 21 使能 DDR 宏, _0 u5 F& i' z$ f9 L
* r9 g( b7 t! |" X' F6 s

7 k/ t7 a2 I$ A- ~- Q3 j9 H4. 修改链接文件,重命名为 “stm32mp13xx_a7_ddr.ld”5 J3 n$ o, t5 b: f8 v: A; d( m
5. 修改 REGION_ALIAS 定义到 DDR 区域:
6 I% f; S  U+ p9 |$ s6 _' B6. 重新编译后,目标文件将链接到 DDR. T+ T7 P: O, f3 ~; z9 v1 B
23.png
% _( H: y2 k/ B  w8 {7 c

0 r' X  I8 V- P5 O" P8 s4 {& S" M▲图 22 修改链接空间) {* b  _8 \& N
24.png
0 W8 l2 k! B$ U' i

2 t2 {, w6 I/ ^- b% O% Q7 V▲图 23 选择链接文件
- ~, z; X( r: `  t7 U& G5 \" k# D& E7 K& A" c9 Y0 ?1 Z# \- h
7. 在调试之前需要先运行 DDR_Init 对 DDR 进行初始化6 L! ^% X! _5 u( ?
8. 按照前述方法导入 DDR_Init 工程,编译后全速运行一次,并保持开发板不掉电项目路径:\STM32MP135C-DK\Examples\DDR\DDR_Init( O8 ]$ \( x0 o  l
25.png
/ e+ u6 @& L6 v
9 b# @6 e, p+ f! u2 v" m
▲ 图 24 运行 DDR 初始化2 d) s, y9 x% |5 J" T3 x, x8 j
2 h0 X/ Q/ W: q; F
- W* V2 I# E! _4 i8 J# g
9. 回到 BSP_BasicTemplates 工程。5 U' E( u+ r" ]  ]7 M# |' [6 A. o# F
10. 在 Debug configuration 对话框中,将 Startup 页面的 monitor reset 删除。9 ?$ Y7 w2 F. C4 \; k/ W/ r
26.png * ^; r) X8 N7 \7 x. g$ T; D7 ?

/ X7 Q2 Z# [6 [, k2 R▲ 图 25 修改调试参数
8 a( U3 O" @4 c) B4 l4 ?( y3 \" U* m( `
- K: {6 K3 e- Q' h. \; v* r

# U, w9 V8 w" U4 c8 [11. 点击 Debug 进入调试
7 ?. @# q" X3 Z: [4 o5 ^12. 可以看到当前 main 函数的地址已经为 0xC000 开头的 DDR 位置, y* o) h  B2 S" @
6 p+ [4 U2 j8 a
" q5 p# z& s8 p% z! D4 K7 x
27.png " k' V. f! J- s, c

5 u* _5 V, N$ t▲ 图 26 在 DDR 中调试工程* G# B  A! q8 u# g" g6 n
/ B" _/ M0 y. q2 @" s

! v3 N- ]! M, i( q$ L05 从外部 Flash 启动; p) A2 ]& I, c* a  }
28.png
6 R4 j( `# T. d4 X$ U9 l, d% Y

4 v3 `* S0 T/ G! Q, s% E▲ 图 27 STM32MP13 启动流程
/ D1 z$ d+ i4 ]9 o2 K: C; ?; e" b! ]" i2 H0 h' X! v
从外部 flash 引导 STM32MP13, 一般需要包含两个部分源码。如上图所示,芯片上电后,首先运行内部固化的一段 ROM CODE,ROM CODE 从用户配置的启动器件中寻找 FSBLA,并将其拷贝至 SYSRAM 中,FSBLA 运行后,执行 DDR 初始化及用户代码(CUBE EXAMPLE)拷贝到 DDR 中,最终实现跳转到 DDR 中运行用户程序的目的。' g3 j- M; R/ P5 a) l2 D

" h) ?1 z' J/ U
这里以 SDCard 启动为例,在第三章节中,我们编译调试的 FSBLA_Sdmmc1_A7 工程,即实现了 FSBLA 部分的功能,BSP_BasicTemplates 工程为实际开发的用户项目。完成启动需要将这两个工程生成的镜像文件都烧录到 SDCard 中。' I6 f$ y5 e5 ~; u

1 d( U+ K' P1 P# ?* l, R1 c! T- s
• FSBLA 需烧录到 SDCard 的固定位置 LBA128 或 LBA640,ROM CODE 固定从这两个位置寻找 FSBLA。
% \2 ]; g8 W) s6 a8 H• CUBE EXAMPLE 的存放位置可在 FSBLA 程序中修改,默认为 SDCard 的 LBA640。
3 I# J9 I2 ~( t2 P• 如果有烧录过 OpenSTLinux 的卡,需先格式化。原因是 ROM Code 优先从 GPT 分区表中寻找 FSBLA,若分区表存在,新烧录到 LBA128 位置的 FSBLA 将会被忽略。
- ]! j) b2 V; k( h" b 29.png
  `4 q' Z* Q4 m" W
▲ 图 28 镜像在 SDCard 中的 Layout# U/ W7 ]3 Q3 P) J2 y2 N/ N6 z

$ A) k3 f8 r$ `; q' k
需要注意的是,FSBLA 和 CUBE EXAMPLE 都需要加入 STM32 Header,才能被系统识别。STM32 Header 是 ROM CODE 加载二进制文件的必要格式,每一个被 ROM CODE 加载的二进制文件都需要在头部添加特定的 STM32 Header。STM32CubeMP13 开发包中提供了ImageHeader 工具,用于为项目二进制文件添加 STM32 Header。开发者不需要深究 STM32Header 的详细内容。: m4 ~" M" R# F% h
30.png % ?7 v' B6 A, Q5 {  Y
▲ 图 29 STM32 Header 信息
0 ?8 R; R" C/ J( A3 Z6 G3 r5 s; |4 e" j3 h' U0 Y
为用户程序加入 STM32 Header,可在工程配置的 post-build steps 中加入如下命令:
- M% f9 r4 G0 r8 ?5 N“(path_to_STM32CubeMP13
5 z  s# R. s2 b5 HPackage)/Utilities/ImageHeader/postbuild_STM32MP13.sh"+ [% O6 p5 `/ z. _
"${gnu_tools_for_stm32_compiler_path}"
; }( p, Q0 E9 C/ o. a"${BuildArtifactFileBaseName}": b9 B) [. Y3 \' f2 f
+ B' a6 G4 x; a" }& \

1 m6 A9 g% n4 l, @7 `* T重新编译完成后,即可生成打上 STM32 Header 的目标文件。* |! b0 K: {- }. K) z; Y
31.png
) |9 C% e. J8 l5 x8 c( q  _7 v& V
▲ 图 30 添加 Post-build 命令
, V: a. c1 m3 z$ `1 [8 P$ ^
- g" w) T6 e" J5 Z3 ~注:path_to_STM32CubeMP13 Package 为 STM32CubeMP13 开发包的存放路径。
8 o  U6 G, ^! c. p3 o$ l0 B$ x- v" K1 ^
至此,已准备好待烧入 SDCard 的目标文件:
8 J2 K1 U5 n9 U0 n: y) a: h. ]' e1. 已添加 STM32 Header 的 FSBLA_Sdmmc 目标文件:FSBLA_Sdmmc1_A7_Signed.bin (即 FSBL)' _4 Y9 P" f+ f& H5 h  K; @
2. 已添加 STM32 Header 的 CUBE EXAMPLE 目标文件:MP13_BSP_BasicTemplates.stm32(即用户工程)
+ r; i% n% M* X2 t* ~; }3 t  |* l+ S: X$ q7 ]& B" e
烧录工程位于 STM32CubeMP13 开发包的如下目录:6 v4 R* [# _7 i. L  N; e
\Projects\STM32MP135C-DK\External_Loader,以二进制的方式提供了烧录时需要的两个引导文件,包括:! q! S* J; k! P; W% x. Y
1.STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32" B7 H4 W: o+ S/ m) v
2.SD_Ext_Loader.bin其中,STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32 为基于开源工程。% D  @9 Q/ L, K& i" E# R$ J: R
; l4 @) z, f  c

) Z7 S: N2 ?! r% m9 yOpenbootloader 实现的一套 IAP 应用,执行烧录流程管理。SD_Ext_Loader.bin 工程执行SDCard 设备的实际擦写操作。+ ]6 l9 p7 p) e5 T
6 `4 A- Y, ^4 {7 T; ]7 ~
+ k* |7 _' f5 T8 E
目前,引导设备可支持 SDCard,QSPI NOR FLASH、EMMC 等,若项目开发中需要修改适配不同的存储设备,可联系 ST 窗口获取烧录工程源码。
" V3 P2 a4 Q7 t; c4 y! D6 h9 S; e3 S5 C1 H6 E% K% @( z0 ^5 H' ~
将需要烧录的两个文件拷贝到 External_Loader 目录下,与烧录工程的两个文件存放在相同位置,然后修改 tsv 文件。完成后,目录中文件列表和 tsv 文件内容如图所示。/ U3 M/ n- N  {" h. D
32.png
0 P  s4 G& P8 d- F4 H$ d
▲ 图 31 烧录文件列表- C2 C* V' o' r% _- L2 v' E4 V
33.png
3 H9 R0 C% F/ ~$ w
▲ 图 32 tsv 文件内容
0 a8 b. h1 ~" e' q  H
/ I- s& k5 f! N  z2 j
6 m+ n  S: Z+ C6 |/ H
接下来,即可使用 STM32CubeProg 进行镜像烧录。可支持通过 USB 或 UART 连接,不支持通过 ST-LINK 连接。这里以 UART 连接为例:3 V( O7 d1 \; @+ |: B. F8 c4 J
1. 开发板跳线设置到 000 并上电' R! u% ^6 J$ F$ o$ V
2. 连接 MicroUSB 口,查看 COM 号。注意通过串口连接时需要断开 USB OTG# B3 L$ C, T$ h: I$ q) G& ], z! |
3. STM32CubeProgrammer 选择连接方式为 UART,选择相应 COM 口
- F& z' h, l$ Z& Z4. 点击 Connect 连接2 Z/ ]$ u8 P+ k+ X' ]4 V
34.png
% K0 u- i1 z, y% g! `6 Y+ h1 N( ~8 [
35.png ( P5 t: `# x$ g7 X" m. ?$ t: I
5. 点击 Open File,选择 FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件
. w) G/ U" J5 ]% V$ {% A1 {, a# X: X6. 点击 Browse,选择目标文件夹:\Projects\STM32MP135C DK\External_Loader\SD_Ext_Loader' V, x# I% v: l  d0 b6 X$ r
7. 点击 Download,开始下载镜像0 b% W7 C% T* ]( ?
36.png & w; o  w1 I/ G

- f* x$ c( V+ M. m+ U( W  u- F 37.png ; G& n0 n/ L  W4 [+ e5 k! D
1 _4 N; }9 F! ^" r& ^
8. 等待烧录完成
* v6 C4 v: x2 Y; j1 a0 a9. 将板子断电,boot mode 切换至 SDCard 启动
* x9 O, V+ D8 P# A3 b10. 重新上电,即可引导启动
& |5 v& r7 e3 C0 t 38.png " K2 B8 ~) V6 k! c5 X$ y

. h. ^8 @* R; P2 k( P1 K% R转载自:STM32, C' x/ Q) t- I: u

# l8 h  W! `" u0 _  o# l" m7 n. S# @) a
收藏 评论0 发布时间:2024-11-22 19:09

举报

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