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

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

[复制链接]
STMCU小助手 发布时间:2024-11-22 19:09
01 引言7 A3 E; M: s+ d6 W6 P2 x+ G
STM32MP13x 系列 MPU 是 STM32 Arm®Cortex® MPU 家族中的一部分,它拥有单核Cortex®-A7 核心,支持核心频率 650MHz~1GHz,不仅能够轻松运行 Linux 操作系统,还同时提供官方 HAL 库,用于支持基于 RTOS 或无 OS 的项目方案,即裸跑应用程序。
! ?6 T: U% F  q6 l& n' {2 [: V$ t5 ]2 j% e5 i5 b2 T5 x1 {# }
本应用文档将就以下几个部分简述如何在 STM32MP13 系列 MPU 上开始无 OS 项目的开发:/ a, ^& c# k- r" b
• STM32MP13x Baremetal 开发环境简介$ v( E; P7 Z+ s: Q; k6 \
• STM32MP13x 工程的创建9 u7 K7 G5 x4 k' _* `
• STM32MP13x 工程的在线调试5 V7 w$ z- M5 t
• 镜像烧录及从外部 Flash 启动. K# V' I/ F( }- y
" @6 _: G& R; {; W# n& W
02 STM32MP13x Baremetal 开发环境简介
" k1 U7 Z2 s* v6 {9 `0 b2.1 开发工具及环境
# X* w! X8 s; [7 |* @STM32MP13x Baremetal 开发工具主要包括:
7 ^1 d9 t' o, v; t6 ?+ ~9 |+ G  K1. 烧录工具:STM32CubeProg ( 版本大于 v2.15.0)  w* Y* Z' Y# Z0 r6 \6 e5 d$ S
2. 配置工具:STM32CubeMX (版本大于 v6.10.0)& V# S' f* h: t! M: i% l, _
3. 开发调试工具:IAR(版本大于 v9.50),或 STM32CubeIDE(版本大于 v1.14), I+ a+ a/ `; q: K: j
本文示例基于 STM32CubeIDE 开发调试工具。3 R) m$ R( N2 Q6 ?8 O
; k8 n0 J" W7 U3 z3 ]4 v$ \" D
" O6 k" W( B5 R* K/ t! j
2.2 STM32CubeMP13 开发包7 _  K0 Y) \' M6 R9 C
STM32CubeMP13 开发包同步发布于 ST 官网 www.st.com 和 github.com,可通过如下方式下载:1 s1 e* S; B! r) q
1. ST 官网下载链接
- X  S' C2 |' W$ k( B* @7 B2. Github 仓库链接# ?! u& P. C7 K# Y
3. 通过 STM32CubeMx 软件下载2 j4 `/ j+ T$ g1 o, n* r: l* |

' E6 J! X& ~7 u# L. N+ p3 j+ C! R
2.2.1. STM32CubeMP13 开发包总览% T" X' r" b- a3 q8 I
STM32CubeMP13 开发包运行在 Arm® Cortex®-A7 处理器上,由以下三部分组成:
3 `% b. j* O" L" n• Level 0:驱动程序,包含 HAL、LL、BSP、CMSIS8 W1 n% ?1 Z( Q. P
• Level 1:中间件,包含 Eclipse ThreadX(原 AzureRTOS),USB Host & Device 库
" ~  ^7 G8 F, q4 u  H" M• Level 2:包含各种板级示例程序1 c! [) k, J0 f# ^% l9 K
除此之外,还包括一些工具助手等。
; _% `6 ]3 R9 x+ `' K' |; B; Q! I7 e1 s2 x9 E* z
, V  E! O) U+ K! ~" B
1.png
& s" j  p7 x9 T
▲ 图 1 Baremetal 开发包源码框架) h) v  r6 z4 ?& @

: ~. N9 [+ e2 }' V# v( W
6 j9 @& x6 L& k# ]8 `
2.2.2. 源码目录结构
* D; a5 b9 Z5 e* G, c' k, D: Z% H 2.png
  F" A) z; N5 J9 q' q2 ~+ _2 |" j▲ 图 2 Baremetal 开发包源码目录
$ E. V0 v) j' G- |7 H4 L7 u) ~1 t- _
2.2.3. 开发包支持模块列表
2 B# O  H2 E$ ]5 \4 b: B  U已支持的 HAL drivers :
6 [0 U/ D; n* ?• 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
; _& u& W, w& A/ q# u+ s7 Q3 Y1 W1 y3 y. Y$ ^# [" L
已支持的 LL drivers :
6 l$ l1 s" @; o$ i• ADC, DMA/DMAMUX, EXTI, ETZPC, GPIO, I2C, LPTIM, MDMA, PWR, RCC & BUS, RTC, SPI, TIM, USART
( g1 [+ p' R0 n8 E# `" I* w. @% Z- M3 W! J
BSP 与 BSP 组件:; M; x: ?$ i  z
• 基于 HAL 封装了更高一级的 API,为 LED、按钮、相机、LCD、SD 卡和 COM 端口提供 API,包含了以下一些外围器件的驱动:GC2145, LAN8742, MCP23x17, RK043FN48H, STMIPID025 o; u) I: t- @. ]( l. r

; [. T" ]$ W( Y! W& L
中间件程序:/ ~3 h% G5 [/ c0 P9 K; h
• 包含一系列支持某种服务的库文件及接口文件,目前已支持:Eclipse ThreadX(原 AzureRTOS),STM32_USB_Device_Library,
% x% s# k. X. M# \) CSTM32_USB_Host_Library& X6 g( M0 i4 @- C& a! s2 w$ H

# G; R+ B& t6 I) J) I
项目工程:$ d  I2 c9 u( Y2 l  n; j
• Examples:基于 HAL 接口的简单示例,没有中间件功能。; D" w3 s+ @' r: T
• Applications:较完整的工程应用实例,包含中间件功能。, z1 y+ ~1 }' D- W+ w0 ^
• External_Loader: 烧录镜像及从外部存储器启动的应用示例。& s) i/ B1 e) T
• Template: 板级工程应用框架。
5 `3 z/ r' y# Q! b
( H8 x$ W/ r0 O5 P4 d* \
实用工具:
8 R4 [+ @! @( _3 R: d2 S4 G• Imageheader:用于添加 stm32 头,支持存储设备启动。
: {" l) C9 A7 w6 p' \• Fonts:提供了一组用于显示的标准字体,包括 font8,font12,font16,font20,font242 _! |- M4 X. `$ Z
( r3 O# T1 L6 x2 |. t
" v1 p8 h% W4 W& [
03 STM32MP13x 工程的创建
) o8 w7 }; O% Y" d2 I" xSTM32MP13x 工程创建,可通过以下两种方式:
, y+ M( w& R6 e: Y( [' ]( q4 F3 K1. 使用 STM32CubeMx 配置并生成项目框架代码,并基于该框架代码开发应用。4 U0 Q: O# f# l
2. 导入 STM32CubeMP13 开发包示例工程代码,并基于该示例代码开发应用。, r5 t0 V' X0 ^1 l& Q! _4 k1 s7 \
1 d" Z" h3 ?: b" k% t/ g
3.1. 从 STM32CubeMX 创建工程
8 q: ]4 w) M6 U; [9 E( ESTM32CubeMX 是 STM32Cube 工具家族中的一员,它采用简单易用的图形界面,可以帮助开发者快速配置硬件和软件。可支持从 MCU/MPU 选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置等,并可生成适用的 C 代码项目。- r/ `6 d& D' Z  ^8 _) D
0 `" Z. X1 s3 b- R, y, W/ ?
本章节简述如何通过 STM32CubeMx 生成适用于 STM32MP13x 的裸跑应用框架。使用该方式无需提前下载 STM32CubeMP13 开发包,STM32CubeMx 可自动联网下载。, D# `) L" Y& G
1. 打开 STM32CubeMX,点击 ACCESS TO MCU SELECTOR,
8 A, p5 E" I9 v' K) _2. 在搜索框中输入 STM32MP13 相应料号,如:STM32MP135FAF7,双击打开配置窗口
: M# q$ ~0 G) @5 j5 A. E3. 弹框选择 MP13 Bare Metal,将生成 bare metal 工程框架。  ?9 f9 [" j8 @! v' @
3.png
$ f4 T8 W+ p, v: S5 \  V
  f8 e, e: c' j( V; w  ^4 D
▲ 图 3 STM32CubeMx 选择器件8 {( U5 F) m5 X, n' t, \
4.png ! e) m" B/ Y  _. ?- X

$ c6 j$ Y+ J. H5 Y% K% x▲ 图 4 STM32CubeMx 选择工程类型- s5 e) y; K. s* x. J5 s8 R
" T; P! ^% t) k  B  ~; J7 O

( S4 Z$ P) i6 J5 g9 A' \2 {) L1 d4. 切换到 Project Manager 标签页,输入工程名称。
" f. S+ W. x- C% S$ {! u5. 在此页进行项目选项配置,可保持默认。# m1 M% h/ W2 a6 }3 h7 S# G; f6 X
5.png
" V) Z! r+ i$ b, P
6 f7 E) r1 s5 U6 j3 U
▲ 图 5 STM32CubeMx 工程设置页面
6 k. ~1 r$ {1 g; E: s) H& w: W# s# ?$ P& O. j2 G" b/ ^0 Q  z
& P3 _. v; a: G0 l# h
6. 回到 Pinout & Configuration 标签页。4 h) [/ V+ K# J( Q8 T( @0 g# r
7. 使能 RCC 和 DDR。
( u( Z% c9 x0 h( B) i' v/ E8. 配置各外设总线,配置方法与其他 STM32 MCU 相同(也可参考 Help -> Docs & Resources)
; P2 f$ w& o" m5 a  z
# b) q' i! ~  L/ `0 Y* m
/ t8 Y, K( Y+ \9 B  K! \
5 }6 Q% X5 U1 n" d# K
6.png - M( H) s9 C# s% h1 S4 F2 v
4 q1 b- ^& e- G+ F" ~6 a: z* ^
▲ 图 6 STM32CubeMx 外设配置页面
/ u8 `4 Z' U9 j2 R1 g% u
$ {3 P% X3 W  a

* o3 c& C" _# X, H, ^! R+ T- p; y9 `9. 切换到 Clock Configuration 标签页。
9 L- `- L# i: a, P& B10. 若软件报告时钟错误,可点击 Yes 自动修复。( i0 C) K( w4 v# i3 R. V
11. 输入 CPU、DDR、总线等的工作频率,系统会自动匹配合适参数。' l5 a8 z$ j2 [

0 r5 `. J- y' F# h. ^+ I' n
7.png
+ l' l; F- V' @# L▲ 图 7 STM32CubeMx 时钟配置页面
! x9 s1 T# Y) q8 Y
! N) z2 x( c, \, e- l
# r! H. B! g' @: R- c7 j+ h
12. 所有外设配置完成,即可点击 GENERATE CODE,开始生成工程代码。
3 w# o) O/ s: X! N13. 若第一次使用,软件将提示是否下载 STM32CubeMP13 开发包,可点击“yes”,软件自动联网下载前述 STM32CubeMP13 开发包。! F/ }3 E! D5 Z) G6 a/ C' @
14. 生成完成后,可直接点击 Open Project,将打开 STM32CubeIDE 工程。7 J* C9 i& ]; d) o, a1 B: ^" C
8.png . G6 i/ X0 `: Z! {1 C

! Y2 k" w. d) N( f7 s▲ 图 8 STM32CubeMx 代码生成页面& }& L# n, ^4 T
9.png / H  _, `) {, [
▲ 图 9 STM32CubeMx 完成代码生成页面  U! q8 {! Z" K5 M$ o+ |" L
10.png , J. l6 e8 v5 M) U8 G
▲ 图 10 STM32CubeMx 生成工程代码示例; g2 v* L1 r7 \! m/ o* @
" j+ R7 `1 ~+ {: G. H  A  M
15. 至此,工程框架已生成,可通过 STM32CubeIDE 进行用户代码的编辑、编译、调试。2 S+ \4 Y/ P8 J/ _0 i( x

8 g& m; ?4 o# ^

, j5 Y( H( O1 E. W+ S: i$ q# W3.2. 从 STM32CubeMP13 开发包导入工程* W1 R1 _+ c) ]6 k
若已事先通过 ST 官方网站或 Github 下载了 STM32CubeMP13 软件开发包,也可导入开发包中的工程示例代码,从示例代码开始进行项目开发。
- N- f5 u, a9 t: F5 B  ?
+ p6 ^  E, N# f) D- H' v
这里以 FSBLA_Sdmmc1 工程为例。8 O" a# T. e2 c3 ?. V
项目路径:\Projects\STM32MP135C-DK\Applications\FSBLA\FSBLA_Sdmmc1( W- ~1 v& l5 F! J5 N
1. 打开 STM32CubeIDE,导入 project
7 n; v/ X" n$ n5 d/ m. `2. 点击 Files -> Import…
, P5 m9 _2 k. d& r 11.png " e- n7 \$ K) M  M  {% g& l
▲ 图 11 STM32CubeIDE 右键项目菜单' `9 A( p8 Y+ q! l0 n3 C
: ?9 j, I/ R7 Q# R3 j" b% u0 e' H
: e8 j, ^* [1 m& a- y' \
3. 选择 Existing Projects into Workspace$ E  o* F: e5 b" L
4. 点击 Next>
) l6 s; @! K: B& {* Y 12.png
7 z9 b+ H" Y9 V' P9 n. `& j& ]

. X* S/ J6 a2 ]8 n0 z, x/ p▲ 图 12 STM32CubeIDE 导入已存在项目5 }4 {; g' t# f2 i
8 h1 [7 N; O9 f6 t4 W) W- h

: T, s9 t* R8 I$ Y5.点击 Browse…,找到目录 \Projects\STM32MP135C-DK\Applications\FSBLA
4 z$ N" |# ^" u( G' u6. 选中 FSBLA_Sdmmc1_A7 工程' |* u( A$ M# @# }) d  t, v' }
7. 点击 Finish,导入 Project
* A5 C5 X% f% e 13.png % F' A$ K* N( n+ F9 S, Z0 M7 p
/ s! B: {, ~& p( l0 \
▲ 图 13 STM32CubeIDE 选择导入项目
9 \' T. O5 N+ k& {' h* Z% a
! h5 M+ \' }7 H- a

/ R8 f, t: f8 ^+ {" J' |) Z8. 工程导入完成。
$ {5 c: U: p; g' G0 J$ t/ B
: L+ d& G/ V2 Z. ]( T

3 v0 u1 |+ l& J& M04 STM32MP13x 工程的在线调试
% B5 z* x* N( X* y9 n& q工程创建完成后,接下来本章节将介绍如何基于 STM32CubeIDE 进行工程编译及在线调试。
5 T9 X4 W. M: h$ A
) W# r4 P# s3 G! l+ f. ~
STM32MP135 内部包含 128KByte SYSRAM,若代码小于 128KByte,可直接运行于内部SYSRAM 中,适用于验证一些简单的外设实例。若代码大于 128KByte,则需要将程序运行于DDR 中。下面将分别阐述。
' B0 }4 S1 }! X8 V, |4 [

; |- r- B1 m5 D4 `9 B4.1. 在 SYSRAM 中调试程序
: i$ h, l; V6 B$ i仍以前述导入的 FSBLA_Sdmmc1_A7 工程为例。  C( B; l7 T' x4 a
1. 首先,将开发板切换到工程模式) w/ i4 k5 }' x
2. 连接 Type-C 电源3. 连接 MicroUSB,这里板载已支持 ST-Link* N" D. X) S# v% O6 C9 x# l
14.png
, h) n7 o7 }; ?% p" {3 [
8 R* j) \# n2 m1 b! r' i
▲ 图 14 开发板切换工程模式
3 {. i2 Q: [- {' ^' D- d4 v' m+ @0 k! a5 Y9 T/ a
4. 右键项目工程名称,选择 Build Project,完成编译。
- G' W% p, n6 A7 v% H/ k 15.png
3 ~' s. ]( a, a% Z- q; d
# B5 c: I! }- ^! ?7 u
▲ 图 15 选择编译工程1 ?) u8 i$ z" a; m" w9 _: E

- y7 H6 [- ~+ l* [

' |. Q2 z7 D- O2 H5. 右键工程名称,选择 Debug As -> STM32 C/C++ Application8 e, M2 {2 V- a7 V( Z
16.png 0 C* ~: K6 c, l" C* x. ~7 E

0 T, K+ U1 N% p# Z3 y▲ 图 16 选择调试项目方法 16 L, Z; B& N! Y7 X4 e3 H( v* i: z
6. 或点击 Debug 图标
+ c+ K$ z' C, v: f) c% f5 R- l7. 进入 Debug Configurations….; X# _( Y# G. O( n% C* h* {# N$ e& K
17.png 1 {% R; c- ~% ~- Z9 |
% ]/ z" @/ J; K6 M- m8 ?
▲图 17 选择调试项目方法 23 @0 M- a* [7 W0 ~, x
& V0 j: B- Y/ i1 j9 C
5 q- p3 s7 t/ a/ y9 ~, W8 \
8. 进入调试配置菜单# n* f' o* d1 C2 b: `: n
18.png
2 r4 Q" ~: n9 n5 R8 p9 E

2 ~$ _) C& Q) T▲图 18 调试配置页面
; B9 F) V! j9 |! r/ Q3 x# r* y) T, z, O+ j9 ~! p- {; ^

& s1 l; X' e/ L3 B# s  i 19.png $ S& `' r7 g, B  K

6 n2 u5 b: o7 w
) P" X) l% Z- f) D
5 s9 N- a2 E% b* d9 A8 u
9. 即可像 MCU 一样调试您的代码。
1 h% a' X5 `/ x; e7 X; S9 P% F 20.png
- M+ L( f# Y( k/ U1 F' W

8 {7 B- T9 a- C/ A$ @▲图 19 项目调试窗口2 H- @1 t( C/ {8 T9 q7 `

" z2 i+ v4 t" Z2 f4.2. 在 DDR 中调试程序! q9 s4 h4 h+ k( V. Y
当代码量超过 SYSRAM(128KB)的大小时,需要将程序运行在 DDR。这里以 BSP_BasicTemplates 工程为例展示如何开发运行于 DDR 的用户程序、) q+ ?' K5 |9 t/ V2 X5 g
1 @2 @, G2 r. I3 n* ~
1. 首先,按照前述方法导入项目工程
& _% K  n! ^: f) I: u; R 21.png
3 ]7 Y1 q- w  d
; z6 L- y( Z* e" i& W# J5 v
▲图 20 导入 Templates 工程' v( G" h& K* N- ]9 A0 s3 C

/ P- N( @; A; d* q) I7 A$ U9 V- n& M

( e6 ~  C2 d8 \3 P2. 打开 C/C++ Build 配置
9 I& V+ M+ N3 d- o! ?' C, N3. 在 Preprocessor 中添加 USE_DDR 宏定义# z. B# F) W/ ~; d+ V3 v
22.png
8 g+ A8 h. `  p4 e. |
" u# o! ~# y: n3 m) k" Z
▲图 21 使能 DDR 宏8 o8 L/ s; N/ G( W5 J
9 E* S( H* z* Y# K6 M4 [8 X/ {
4 t: n( I# t5 b$ v
4. 修改链接文件,重命名为 “stm32mp13xx_a7_ddr.ld”& A2 f, Y$ }  [- f% w! Y4 ^2 \. K
5. 修改 REGION_ALIAS 定义到 DDR 区域:
9 h: q8 A8 ]) N5 h  V6. 重新编译后,目标文件将链接到 DDR
9 O5 t# [! ^# y! F( J. X0 h 23.png " Q: D! }* d: f+ ]0 M7 H
7 [, n4 V+ H1 ]! D# \4 I, V
▲图 22 修改链接空间
; D& }0 @; X6 M! V/ ]+ C1 o7 F0 m; y, g 24.png
1 X/ A0 M6 b) g1 o% @# z3 h$ T
, O6 |  I: G+ m% ^3 \
▲图 23 选择链接文件
" t  ~$ }  b: b+ U
& _9 H- U  @7 V6 A0 r& W$ c
7. 在调试之前需要先运行 DDR_Init 对 DDR 进行初始化- ?- [3 Y& L) }7 [& X) s! ]
8. 按照前述方法导入 DDR_Init 工程,编译后全速运行一次,并保持开发板不掉电项目路径:\STM32MP135C-DK\Examples\DDR\DDR_Init0 L9 a4 r( O6 k
25.png
+ f4 J) T. q+ e' {; P; V' P% [

8 {! a7 R" S/ S0 i' t( F1 V5 S# _( B▲ 图 24 运行 DDR 初始化
# |4 b, ~3 F6 e+ h: T: T
- l2 r. x# b1 e8 L/ G1 {

: N+ T. W# g9 V: j1 y3 ]9. 回到 BSP_BasicTemplates 工程。8 S4 m, {# b: C- x7 s3 _& }
10. 在 Debug configuration 对话框中,将 Startup 页面的 monitor reset 删除。6 b1 ~4 O; ~# _4 [. y8 Z- _
26.png " @% y4 L0 j1 M0 f5 L, H9 z' [" c
9 p% q% S2 }$ S( S
▲ 图 25 修改调试参数
4 i: I  a. @- E. {, b0 D0 c8 q+ M1 L1 x6 ]. j9 p
3 s3 {5 S! [, k8 b7 u# G
11. 点击 Debug 进入调试
3 o' ^3 h* ]7 {9 {, u12. 可以看到当前 main 函数的地址已经为 0xC000 开头的 DDR 位置
  @- l% E. {% k* o  e$ P1 G+ S( f1 L# J
2 k7 H" X7 X6 R; }% a/ _+ r
27.png
4 l9 z' P- a; y) d" j& H

! G% p  F+ c- N! k7 X▲ 图 26 在 DDR 中调试工程# u# A9 |# L0 L9 e: L. U7 o1 `

- {2 `, b& D7 R3 |

. J, ?) p; M6 Y; O( e: W05 从外部 Flash 启动
7 N% b6 B& [5 S8 C0 d) Y 28.png
! Q4 f- N! ?) h; R# k- R3 R& G( E

8 m% U' ~+ @" R$ u" W# |▲ 图 27 STM32MP13 启动流程% A# Q/ W. t8 O" y" F

; \0 p" o+ j- v
从外部 flash 引导 STM32MP13, 一般需要包含两个部分源码。如上图所示,芯片上电后,首先运行内部固化的一段 ROM CODE,ROM CODE 从用户配置的启动器件中寻找 FSBLA,并将其拷贝至 SYSRAM 中,FSBLA 运行后,执行 DDR 初始化及用户代码(CUBE EXAMPLE)拷贝到 DDR 中,最终实现跳转到 DDR 中运行用户程序的目的。
  s! W3 X0 R. S& W( E, d
( z; f( K: |9 v
这里以 SDCard 启动为例,在第三章节中,我们编译调试的 FSBLA_Sdmmc1_A7 工程,即实现了 FSBLA 部分的功能,BSP_BasicTemplates 工程为实际开发的用户项目。完成启动需要将这两个工程生成的镜像文件都烧录到 SDCard 中。
0 m& I# G% d8 z6 y( e1 w. X4 N  V  @5 P2 T. K2 F8 s, o3 I
• FSBLA 需烧录到 SDCard 的固定位置 LBA128 或 LBA640,ROM CODE 固定从这两个位置寻找 FSBLA。6 U9 r2 P9 [) e& i+ Z
• CUBE EXAMPLE 的存放位置可在 FSBLA 程序中修改,默认为 SDCard 的 LBA640。
  C6 w1 M1 Z4 i5 r• 如果有烧录过 OpenSTLinux 的卡,需先格式化。原因是 ROM Code 优先从 GPT 分区表中寻找 FSBLA,若分区表存在,新烧录到 LBA128 位置的 FSBLA 将会被忽略。4 j% n& d) ]' f6 K
29.png
/ K! W4 s1 }4 S+ F! H3 m# I( l
▲ 图 28 镜像在 SDCard 中的 Layout1 a( A# B$ \4 e0 s  _, @
4 W- z5 Y/ }# G! T
需要注意的是,FSBLA 和 CUBE EXAMPLE 都需要加入 STM32 Header,才能被系统识别。STM32 Header 是 ROM CODE 加载二进制文件的必要格式,每一个被 ROM CODE 加载的二进制文件都需要在头部添加特定的 STM32 Header。STM32CubeMP13 开发包中提供了ImageHeader 工具,用于为项目二进制文件添加 STM32 Header。开发者不需要深究 STM32Header 的详细内容。8 \+ {9 c( j' U' s3 t3 P
30.png 3 V6 `% C7 G6 k; [: c: f. F7 w
▲ 图 29 STM32 Header 信息& n- o$ Y3 Q- V: A, N

2 n* m2 F3 _+ O/ m4 R" F
为用户程序加入 STM32 Header,可在工程配置的 post-build steps 中加入如下命令:) y- x) D4 [) r
“(path_to_STM32CubeMP13% C4 \; ]6 Q# T+ w% i: M4 C
Package)/Utilities/ImageHeader/postbuild_STM32MP13.sh"6 u' J  J; _6 Q
"${gnu_tools_for_stm32_compiler_path}"
6 l( {' E. P" `# u) t+ s: D, o"${BuildArtifactFileBaseName}"7 J3 j. S& I4 p+ K1 E6 j! p" \0 J
! u  k; m. h( _# b! ]0 I* ^4 i

. A  v/ Z: L/ E4 I  y: E$ g重新编译完成后,即可生成打上 STM32 Header 的目标文件。
, g. d, w' V- x( D# h 31.png
" h4 k1 j  K: p6 f
▲ 图 30 添加 Post-build 命令+ k; A: I/ {3 Z
, Q! _3 b  m, }- u
注:path_to_STM32CubeMP13 Package 为 STM32CubeMP13 开发包的存放路径。1 Y( l1 W7 j" J1 `# w

5 Q0 Q  F; C  x, k& ^1 `7 k
至此,已准备好待烧入 SDCard 的目标文件:; b2 t1 z4 c( M! v& }. J! X6 l
1. 已添加 STM32 Header 的 FSBLA_Sdmmc 目标文件:FSBLA_Sdmmc1_A7_Signed.bin (即 FSBL)
2 m, o- r& u) Y# C2. 已添加 STM32 Header 的 CUBE EXAMPLE 目标文件:MP13_BSP_BasicTemplates.stm32(即用户工程)
, E; [/ K, u6 }4 D" O+ I+ t) N8 D2 l. \# K4 j7 ~: E# i
烧录工程位于 STM32CubeMP13 开发包的如下目录:9 M( \( T/ r6 Z* r' H
\Projects\STM32MP135C-DK\External_Loader,以二进制的方式提供了烧录时需要的两个引导文件,包括:
! w2 r% C8 P2 e4 C( }$ I! Z+ n1.STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32
; r- a2 g  O, ~- D! B* c2.SD_Ext_Loader.bin其中,STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32 为基于开源工程。5 Y& f) x% x; \1 h* p

: h" r- w9 E. h2 r- H7 Q8 _
: ~& Q4 u4 g( `
Openbootloader 实现的一套 IAP 应用,执行烧录流程管理。SD_Ext_Loader.bin 工程执行SDCard 设备的实际擦写操作。" E* j1 U6 R" K0 V8 w

5 j# C3 Q; M% t9 w* O
% S) D1 B$ k7 Y
目前,引导设备可支持 SDCard,QSPI NOR FLASH、EMMC 等,若项目开发中需要修改适配不同的存储设备,可联系 ST 窗口获取烧录工程源码。1 [+ x. T7 V) B( S

5 R' x5 k! |, ^
将需要烧录的两个文件拷贝到 External_Loader 目录下,与烧录工程的两个文件存放在相同位置,然后修改 tsv 文件。完成后,目录中文件列表和 tsv 文件内容如图所示。
" s5 O# }% z8 J 32.png
' h7 [" }$ {  |, {% E, I
▲ 图 31 烧录文件列表
" V7 C. E! d3 i# c" Y) @ 33.png 7 e' i# N8 `5 [; y* P8 O* |
▲ 图 32 tsv 文件内容) v: Y9 n, O2 v- F3 A% U* c

! [) u* N& a4 X& u1 F

. w2 M: o6 m# K8 \接下来,即可使用 STM32CubeProg 进行镜像烧录。可支持通过 USB 或 UART 连接,不支持通过 ST-LINK 连接。这里以 UART 连接为例:
8 W2 M1 n" Y" G4 d: |! ~1. 开发板跳线设置到 000 并上电& h- B+ ~- @* u* i  S
2. 连接 MicroUSB 口,查看 COM 号。注意通过串口连接时需要断开 USB OTG9 ?7 d2 N9 o: O6 _" C, Q
3. STM32CubeProgrammer 选择连接方式为 UART,选择相应 COM 口5 s. ?- M( d# D. h
4. 点击 Connect 连接
4 E, K" X5 t0 h, I- K 34.png
- E- d, {& i8 ~* j3 y: `" }# H) A# {
35.png 5 m6 h3 r  i- U; e7 o% n
5. 点击 Open File,选择 FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件3 P) Q2 V/ n4 k$ w' x
6. 点击 Browse,选择目标文件夹:\Projects\STM32MP135C DK\External_Loader\SD_Ext_Loader
8 y$ J, f9 o! i/ n7 ?+ ?$ i7. 点击 Download,开始下载镜像, N& m0 e  Y  U8 O7 i0 N$ O7 x+ U
36.png
* y* T5 j  A$ f# H$ l: s$ z# f
* }$ l& b7 P5 p' Q
37.png
! d& ^+ F8 l: F
  q; g: j7 |6 F- b8. 等待烧录完成
' i1 |8 l2 i( i9. 将板子断电,boot mode 切换至 SDCard 启动/ k* ~. j8 h- O' l" C  f% X0 I7 U$ ~
10. 重新上电,即可引导启动
' `- ~, A* D" g' N: j, H 38.png
  z  C( l! t$ V% O& p* @8 h) D) C' T; G6 N+ l$ N& k" e6 {7 z
转载自:STM32+ w: {" Q0 V7 a  v0 f/ i

" A: e- s3 r! v# [- O& T% B
  E: ]$ ~- z2 B6 _+ i  ~
收藏 评论0 发布时间:2024-11-22 19:09

举报

0个回答

所属标签

相似技术帖

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