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

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

[复制链接]
STMCU小助手 发布时间:2024-11-22 19:09
01 引言) K3 x6 M8 v( Y* L, y9 L
STM32MP13x 系列 MPU 是 STM32 Arm®Cortex® MPU 家族中的一部分,它拥有单核Cortex®-A7 核心,支持核心频率 650MHz~1GHz,不仅能够轻松运行 Linux 操作系统,还同时提供官方 HAL 库,用于支持基于 RTOS 或无 OS 的项目方案,即裸跑应用程序。5 A( T" G9 W4 _+ d
- [! N( `7 i* I( v0 h+ k9 R
本应用文档将就以下几个部分简述如何在 STM32MP13 系列 MPU 上开始无 OS 项目的开发:5 e/ I1 l3 K2 X4 @, m* R2 h
• STM32MP13x Baremetal 开发环境简介
! j" ~$ Z) Q: S" M2 `3 v# |5 g• STM32MP13x 工程的创建" R$ {+ R/ C9 f3 ?3 c3 ~
• STM32MP13x 工程的在线调试+ R" E0 y9 ?* s" _
• 镜像烧录及从外部 Flash 启动5 ^$ Y% _" Y# e1 C
& M/ }: J' c4 I4 k7 m1 T
02 STM32MP13x Baremetal 开发环境简介
4 `/ ^3 V6 {+ C- i) c4 ^4 @) H; z2.1 开发工具及环境4 W* Q' P! R7 n9 e5 C
STM32MP13x Baremetal 开发工具主要包括:
/ Z0 U, ]; W; r1. 烧录工具:STM32CubeProg ( 版本大于 v2.15.0)
+ s2 H  b! d1 I* f7 g2. 配置工具:STM32CubeMX (版本大于 v6.10.0)5 f! ]4 p: h: H$ J$ R6 j' m
3. 开发调试工具:IAR(版本大于 v9.50),或 STM32CubeIDE(版本大于 v1.14)0 x4 H. ?) [9 u7 l( H
本文示例基于 STM32CubeIDE 开发调试工具。2 ]  I. c' \! z- B4 W+ g
% q' i3 B( P+ D' E- h& {- _

# @  J* Y+ K5 l, C$ b" b# l: C7 s2.2 STM32CubeMP13 开发包+ m  s! S  r" X0 H; r% |' w
STM32CubeMP13 开发包同步发布于 ST 官网 www.st.com 和 github.com,可通过如下方式下载:+ o3 p8 M: I3 s! Z
1. ST 官网下载链接
/ T3 h7 N$ L+ e3 l: Q) o2. Github 仓库链接3 E% [6 p% ]1 R0 e3 b( P
3. 通过 STM32CubeMx 软件下载7 i% q7 n/ V5 v

& ~; F6 E& ]) {" _% b- a9 {
2.2.1. STM32CubeMP13 开发包总览
. i* v% B0 q- dSTM32CubeMP13 开发包运行在 Arm® Cortex®-A7 处理器上,由以下三部分组成:* C% _# ?- C9 C3 h. S: o8 ^( p8 V/ S
• Level 0:驱动程序,包含 HAL、LL、BSP、CMSIS; j: Z  H: d1 H: G3 _
• Level 1:中间件,包含 Eclipse ThreadX(原 AzureRTOS),USB Host & Device 库
/ G6 W# I5 r' G0 m, N• Level 2:包含各种板级示例程序3 }* k& F0 {, N% v
除此之外,还包括一些工具助手等。
$ _  Y5 N' _- h
9 j. Z+ E7 p2 G) j

4 o& A  Y! X& ]3 t+ B 1.png
# C& {/ Q3 }5 {& o/ {
▲ 图 1 Baremetal 开发包源码框架3 v" g" b5 B- B: V8 \7 N
/ X# `- |4 F( r- ~& E* b& |; O3 x

; [- x8 o0 E: o; i2.2.2. 源码目录结构+ a! Y6 j5 H  y' N. |: K
2.png 5 Y0 h5 [+ m% Q) `
▲ 图 2 Baremetal 开发包源码目录
4 e" Q1 |5 ~& U: l
3 `3 `+ ?* F& C8 q  T
2.2.3. 开发包支持模块列表: E+ v& p4 _! r/ J& \! @* e
已支持的 HAL drivers :8 T) ?, y5 q! D1 J. x6 t$ 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
3 r/ V1 `1 a& l4 x( `3 n7 I8 m$ Q2 c! V+ O
已支持的 LL drivers :
* k% Y, q/ }9 Q; H; m  x( @0 g• ADC, DMA/DMAMUX, EXTI, ETZPC, GPIO, I2C, LPTIM, MDMA, PWR, RCC & BUS, RTC, SPI, TIM, USART2 h& u: Y3 x9 ~3 ]

6 F4 i& k3 c8 ~/ j, J/ g  {
BSP 与 BSP 组件:
+ j8 f! K& e+ h- x) ?" A• 基于 HAL 封装了更高一级的 API,为 LED、按钮、相机、LCD、SD 卡和 COM 端口提供 API,包含了以下一些外围器件的驱动:GC2145, LAN8742, MCP23x17, RK043FN48H, STMIPID02
# n9 K5 Q- J3 `! _# U  p
; r0 E% p5 Q& ]: X
中间件程序:
9 Z+ V6 C2 N- x/ e9 X1 _• 包含一系列支持某种服务的库文件及接口文件,目前已支持:Eclipse ThreadX(原 AzureRTOS),STM32_USB_Device_Library,- h" [- z, P* T: n2 s
STM32_USB_Host_Library
) [1 E4 C  d6 X, x7 s# l' w) j: K0 E( G: g
项目工程:# w3 m- O% R4 E* t# L4 j
• Examples:基于 HAL 接口的简单示例,没有中间件功能。
" R: o7 f/ G( i" d6 \  Q• Applications:较完整的工程应用实例,包含中间件功能。
8 @0 r* v3 K" l$ |) ^# x; v• External_Loader: 烧录镜像及从外部存储器启动的应用示例。
$ j- ~1 {* b  J! w5 B6 O• Template: 板级工程应用框架。& Z9 H5 i' O, q& v: U3 E
& d: K8 j- J! F6 _4 |) L: }
实用工具:  O) c6 d/ @/ }. H) [
• Imageheader:用于添加 stm32 头,支持存储设备启动。( {& q8 r" Z: d! r4 p
• Fonts:提供了一组用于显示的标准字体,包括 font8,font12,font16,font20,font24
% H/ Y9 X) j9 k7 g1 U* {
6 \6 L5 ]6 E/ l8 ^

* {! k; j0 D3 B9 w. C5 D03 STM32MP13x 工程的创建7 N5 Z& |1 {" i1 N, w* {7 @" ~
STM32MP13x 工程创建,可通过以下两种方式:5 F7 V) S2 l4 j+ [- S. M( i( r) d1 b
1. 使用 STM32CubeMx 配置并生成项目框架代码,并基于该框架代码开发应用。: a6 `( A- k7 }+ R2 M6 `! F# U0 P
2. 导入 STM32CubeMP13 开发包示例工程代码,并基于该示例代码开发应用。
$ x# }" e) v& j, O( \3 z/ {9 j3 n3 r: w  u4 [
3.1. 从 STM32CubeMX 创建工程
- v+ I" m2 [. LSTM32CubeMX 是 STM32Cube 工具家族中的一员,它采用简单易用的图形界面,可以帮助开发者快速配置硬件和软件。可支持从 MCU/MPU 选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置等,并可生成适用的 C 代码项目。
# |- Y# y' D4 l0 X4 [$ {3 j+ p" }+ d1 |5 b
本章节简述如何通过 STM32CubeMx 生成适用于 STM32MP13x 的裸跑应用框架。使用该方式无需提前下载 STM32CubeMP13 开发包,STM32CubeMx 可自动联网下载。; w, V7 s- {& \) ~1 L) n$ }
1. 打开 STM32CubeMX,点击 ACCESS TO MCU SELECTOR,
* A, O3 x' G. z2. 在搜索框中输入 STM32MP13 相应料号,如:STM32MP135FAF7,双击打开配置窗口6 q  ~  N4 b" r' ~) B- g* c" o
3. 弹框选择 MP13 Bare Metal,将生成 bare metal 工程框架。- c, o" z3 q( n2 _
3.png
# |/ p3 n. \" C6 _- e& D

* \* m9 K( g( q( J* h5 O▲ 图 3 STM32CubeMx 选择器件
) g, d# R. i! X$ V! D 4.png ) m" w/ R, Y; J1 p
+ y6 Q6 k6 Z& w+ U; ?
▲ 图 4 STM32CubeMx 选择工程类型
4 |7 |; O: E7 Z; {+ d; R
: _! ?+ C# _3 t+ b, W" @

+ w' D/ o3 B9 X0 Y1 n" b, D. H1 }4. 切换到 Project Manager 标签页,输入工程名称。2 D& F* b. r8 t3 X# W6 H  E! Y3 g3 a
5. 在此页进行项目选项配置,可保持默认。; x- {8 F# J) y3 [) I8 `$ D. r. y- Z
5.png % N1 u' G' ~6 w- s# S7 ?
7 m0 m1 F  v  X- T# ?
▲ 图 5 STM32CubeMx 工程设置页面( e: c& W+ D& l' e0 [
( r0 @0 x  d6 z

4 E& d+ Y! B( m6. 回到 Pinout & Configuration 标签页。" v! q- b8 j; U2 _+ b# G' w
7. 使能 RCC 和 DDR。4 t0 f: ]9 A) W0 M8 j3 r" _( d5 i1 U' z
8. 配置各外设总线,配置方法与其他 STM32 MCU 相同(也可参考 Help -> Docs & Resources)6 Y& E3 e1 K3 ?: l0 s& I

$ M+ g' k9 \' a6 M* p+ M; z6 M- a2 p* m- Q2 Y  V" j& V- M2 ^
% n" a/ f4 Q5 s: y$ \
6.png : |4 f8 |' {# z4 C4 V* `5 f
5 L1 @3 E( V" T! K, J( d. }
▲ 图 6 STM32CubeMx 外设配置页面% u4 _0 C0 V9 }+ G; P4 Z
+ Y: a& @  M& k6 K- o; z
3 z' ]- s9 A4 o/ E4 @! d8 t
9. 切换到 Clock Configuration 标签页。
4 |8 }' `; Q: [6 c" K" M3 ^10. 若软件报告时钟错误,可点击 Yes 自动修复。5 |3 R- W& j5 e0 ~& u
11. 输入 CPU、DDR、总线等的工作频率,系统会自动匹配合适参数。
, O3 E# d7 ~5 e# _) z6 C$ Y
( ^+ C5 Y/ Q8 u0 \3 n1 ?! R
7.png 1 n% e0 t( a4 o+ ?9 }( W' J* x
▲ 图 7 STM32CubeMx 时钟配置页面
" ]- o3 x" l* ?/ X0 V9 n  v& C8 _3 O8 _( t% B& m- p

4 C6 ^/ Y9 d/ ^; W* x12. 所有外设配置完成,即可点击 GENERATE CODE,开始生成工程代码。' o3 [1 _4 s6 _5 b
13. 若第一次使用,软件将提示是否下载 STM32CubeMP13 开发包,可点击“yes”,软件自动联网下载前述 STM32CubeMP13 开发包。
+ E% H$ b/ W7 ~7 `! T/ o8 S7 t14. 生成完成后,可直接点击 Open Project,将打开 STM32CubeIDE 工程。9 B; T: t' G7 e5 g- Z' f
8.png ; W% ^4 ~1 ~5 L: V6 v! Y

- |5 k3 H# C2 n! c( ~: _▲ 图 8 STM32CubeMx 代码生成页面2 k  d0 r# ?5 ~' ?, n
9.png
8 L( b$ C1 D* l* U+ l
▲ 图 9 STM32CubeMx 完成代码生成页面
7 w! f/ g( r* b) }4 r 10.png
' w. `1 [2 p* \( y. P! g  `
▲ 图 10 STM32CubeMx 生成工程代码示例
& e% e: f8 d& y: v5 C+ g; `3 Q7 h% v6 M  D) W
15. 至此,工程框架已生成,可通过 STM32CubeIDE 进行用户代码的编辑、编译、调试。5 `; [( r/ J' r

* p1 x4 |  @5 x, Z. b
: J# D6 v  Z8 |7 [9 w
3.2. 从 STM32CubeMP13 开发包导入工程
" g8 b3 ?+ S6 Y2 a, A' R4 Y- E% W若已事先通过 ST 官方网站或 Github 下载了 STM32CubeMP13 软件开发包,也可导入开发包中的工程示例代码,从示例代码开始进行项目开发。8 ]+ G# q( N0 L
# p6 M7 Q7 q, w$ H
这里以 FSBLA_Sdmmc1 工程为例。7 c' ^+ C7 a# P, V2 X
项目路径:\Projects\STM32MP135C-DK\Applications\FSBLA\FSBLA_Sdmmc1
+ g" o6 f3 n/ m! d1. 打开 STM32CubeIDE,导入 project7 }3 ?, f4 I6 B; T8 r/ q6 F
2. 点击 Files -> Import…+ b0 n; a' a8 {- o
11.png
  F* J0 M& }8 c( U. r; G" J. c* c6 Z' m
▲ 图 11 STM32CubeIDE 右键项目菜单! x. E# y8 U9 [( M

9 t: h" s! E! k$ I9 ~

' O" s, @6 A& T9 ]3. 选择 Existing Projects into Workspace4 Z6 J' c4 l" F/ k: J
4. 点击 Next>; I2 v& z2 L/ C9 l# Y* \
12.png
/ F* I, }/ _  F+ w
/ X. T: Y; d7 J! j( C; \
▲ 图 12 STM32CubeIDE 导入已存在项目
. i' Q3 p: i! q: w( Y1 c
# A- P0 P+ l) g* z. L

( T3 i* W6 E% K( I. }5.点击 Browse…,找到目录 \Projects\STM32MP135C-DK\Applications\FSBLA/ n1 o& L8 E3 L& _0 @
6. 选中 FSBLA_Sdmmc1_A7 工程
! L2 W: a  z: T. P. ^: [4 X7. 点击 Finish,导入 Project
) f. f. @" y! v; e6 S+ Z! n% b 13.png . Y* {! n# B1 A( \" k# k, K
" `: P- q: }+ }9 T
▲ 图 13 STM32CubeIDE 选择导入项目
; l2 }% Q& Q. T
& q0 j0 A& }+ Y  s* O  K

) K+ _; w& A: }8 x- y% r8. 工程导入完成。
: B) o6 H. J) \. P3 I% [( G9 ~8 o1 I; S( q

7 E. P3 j0 G# Q" Y' k04 STM32MP13x 工程的在线调试! r% x" z. ^( B  E
工程创建完成后,接下来本章节将介绍如何基于 STM32CubeIDE 进行工程编译及在线调试。
- j$ N% x" E, g, |% q. c4 u# i/ c; |  A3 e. Y+ P& N6 V4 l" @' B/ e1 p! I
STM32MP135 内部包含 128KByte SYSRAM,若代码小于 128KByte,可直接运行于内部SYSRAM 中,适用于验证一些简单的外设实例。若代码大于 128KByte,则需要将程序运行于DDR 中。下面将分别阐述。
, P$ j  }# V* K

; k, o1 p: B( R. Q; W& f4.1. 在 SYSRAM 中调试程序& u* K8 u1 J4 \$ c+ |" \
仍以前述导入的 FSBLA_Sdmmc1_A7 工程为例。
0 G7 L) B3 d! j) ?5 E1. 首先,将开发板切换到工程模式/ b( ?. E; i$ X  s
2. 连接 Type-C 电源3. 连接 MicroUSB,这里板载已支持 ST-Link0 x* O+ Z# U+ X/ ]! d* G
14.png   t8 R$ k' [* V+ G- y1 A0 \$ G

/ E  g9 p& B( U, v7 U; b▲ 图 14 开发板切换工程模式* r( E" W8 G& K5 ~

3 ]# o0 b  V1 M5 m2 ^6 F" K
4. 右键项目工程名称,选择 Build Project,完成编译。1 ~1 o. G+ _/ T; w
15.png
$ G' |0 V: K. i7 N- u) T" g# d

4 X0 q+ c, h8 n& F0 b2 ]▲ 图 15 选择编译工程  T# i* R" O  F* @# e: M
2 X! ^/ D  E, q. f, M7 B, \+ y0 `
; x8 o8 C* X/ h
5. 右键工程名称,选择 Debug As -> STM32 C/C++ Application  ?4 H2 N) Y7 L& |, R8 q
16.png
5 L: v. O5 ?6 Y, f- n" W. u

6 o( A+ A( K/ ?) y2 {▲ 图 16 选择调试项目方法 1
2 {' z; \- |8 Z0 j9 s2 e6. 或点击 Debug 图标! A; ?. `% r0 Y7 h
7. 进入 Debug Configurations….
1 f7 C2 x0 P  ?1 L3 {: m 17.png
8 l; V3 e% w( T- V: e
6 t" q; Y4 A0 Y- C' T& \
▲图 17 选择调试项目方法 2
. ?+ S$ E- O" h& N/ ]; `* z" x- e  x8 ]* ~
( M, n# \+ t3 p& I
8. 进入调试配置菜单
+ K. A, \2 O5 L 18.png
1 t3 S2 ^! y& C  w( e6 E5 s
6 q2 r2 ]9 b" W$ w, y) W; R
▲图 18 调试配置页面* t" V0 ?) K9 K* D8 M9 C

# F2 O) Q) ^  G/ ]

; z9 p3 o" h( I. t& @9 [' z6 u8 R& e# g9 | 19.png " S) X7 q: ~$ v+ b% s( Z
- O2 u& B+ t9 `2 B3 b
8 w7 Q- {8 m4 G+ }$ z
# q, I8 }4 f1 {5 r1 n! x
9. 即可像 MCU 一样调试您的代码。4 L5 y3 E& k! C% G' \
20.png
- f# G1 P0 f- m5 C/ j, G' }
. S. k) K$ H% V% l/ c5 f- [
▲图 19 项目调试窗口& r$ _) K# {" T" J

- f0 F3 f/ d! R. E# D4.2. 在 DDR 中调试程序
# e: q3 q. ?6 b1 Q% L) O当代码量超过 SYSRAM(128KB)的大小时,需要将程序运行在 DDR。这里以 BSP_BasicTemplates 工程为例展示如何开发运行于 DDR 的用户程序、/ s+ A/ l' Z- x, R- Q' N
/ s3 v  Q0 z. f& U# _& C# f' r
1. 首先,按照前述方法导入项目工程
! U0 h4 H( H% m 21.png   t1 B) x& t4 @

% t9 s1 f; c9 @& U! n1 \▲图 20 导入 Templates 工程6 _# ^; f. I5 \$ U
$ `7 d0 {5 m8 j, ^7 _

9 Q% O5 F! R7 N1 l1 j2. 打开 C/C++ Build 配置
( e9 `& h/ m/ P- y0 R: B3. 在 Preprocessor 中添加 USE_DDR 宏定义! \" y* k: O$ l3 {8 B7 r% O7 z
22.png - a% `% O# [4 I; S
* z" w; g' E& d7 ?
▲图 21 使能 DDR 宏
( u" Z: ~% g8 j5 B% v; C: x% s" W; M2 K1 G* b8 D) l; d* _
4 q, @  L& M. b# M
4. 修改链接文件,重命名为 “stm32mp13xx_a7_ddr.ld”
7 t4 }- ~. w4 Z& Y  N6 D) ?5. 修改 REGION_ALIAS 定义到 DDR 区域:
# E  e/ t: h& r! K7 w' `6. 重新编译后,目标文件将链接到 DDR
- L" i" {3 a5 `% D" A 23.png
8 _0 |2 e6 q3 Q' ]

9 H% T; v' s. M3 t- v4 z▲图 22 修改链接空间7 m: x; r2 e5 l7 H7 k* A6 `, T
24.png $ H, D. E; H  @1 X
! k+ s) k# t7 r% ]! o* q) W
▲图 23 选择链接文件
* k. r4 M: ?# e6 I$ W
3 I1 d9 C5 T, l, k
7. 在调试之前需要先运行 DDR_Init 对 DDR 进行初始化, [" ?2 A1 ]7 H, M  N9 p+ t* W
8. 按照前述方法导入 DDR_Init 工程,编译后全速运行一次,并保持开发板不掉电项目路径:\STM32MP135C-DK\Examples\DDR\DDR_Init3 T4 X  p& Y/ Q1 p$ N; I( b, I
25.png # j& n* u' `7 S' Q

# I' l3 l& `, A▲ 图 24 运行 DDR 初始化5 e+ r) q2 o. m. V
, J- R3 Z* u# G  ^

! [( Z# R4 M7 B2 S$ O$ N9. 回到 BSP_BasicTemplates 工程。
1 ]: K) T* h+ K+ K9 V% A% X" {10. 在 Debug configuration 对话框中,将 Startup 页面的 monitor reset 删除。4 i' I; d# ]& M: q
26.png " ?+ ~& Y3 ^& @3 \

6 I9 S, g; L( b: ]. ]▲ 图 25 修改调试参数% P! W6 Q5 M: \

; b% r, X/ f, ]

4 G- s  n1 y* ?2 R: _11. 点击 Debug 进入调试* e- s0 f; x- R% u0 Z; ^
12. 可以看到当前 main 函数的地址已经为 0xC000 开头的 DDR 位置
' C6 e1 d3 `$ B* g3 l
) _, S5 s6 d, F  I& A! B
0 M# s. N* b/ ?( V
27.png
3 L: X2 ]  V0 K# e3 E9 h4 C$ H
$ n; u( k# g% T
▲ 图 26 在 DDR 中调试工程
/ ]( M8 d3 j% l+ N: H' G9 C& e3 l8 ]+ g6 q

( C& n7 @7 E& u7 J4 ~' g$ f' [* C05 从外部 Flash 启动( I7 A% U/ Y+ J
28.png ( x' C% t3 f' k1 y# ?, z  o
! V* N3 L# I& S! H- M2 k. j8 K
▲ 图 27 STM32MP13 启动流程0 Z# I8 ?# [8 f7 r
( R; W" a3 d- q5 X* ?. F* p
从外部 flash 引导 STM32MP13, 一般需要包含两个部分源码。如上图所示,芯片上电后,首先运行内部固化的一段 ROM CODE,ROM CODE 从用户配置的启动器件中寻找 FSBLA,并将其拷贝至 SYSRAM 中,FSBLA 运行后,执行 DDR 初始化及用户代码(CUBE EXAMPLE)拷贝到 DDR 中,最终实现跳转到 DDR 中运行用户程序的目的。8 l* k( f( P$ k  f
. @% l% d6 L5 ]! ~
这里以 SDCard 启动为例,在第三章节中,我们编译调试的 FSBLA_Sdmmc1_A7 工程,即实现了 FSBLA 部分的功能,BSP_BasicTemplates 工程为实际开发的用户项目。完成启动需要将这两个工程生成的镜像文件都烧录到 SDCard 中。( J( {" ^1 D1 w2 L. v
7 O* P4 x  I& i- A- z
• FSBLA 需烧录到 SDCard 的固定位置 LBA128 或 LBA640,ROM CODE 固定从这两个位置寻找 FSBLA。
6 _9 n0 t" z: l# S: n• CUBE EXAMPLE 的存放位置可在 FSBLA 程序中修改,默认为 SDCard 的 LBA640。" m3 Z( Z8 H5 h
• 如果有烧录过 OpenSTLinux 的卡,需先格式化。原因是 ROM Code 优先从 GPT 分区表中寻找 FSBLA,若分区表存在,新烧录到 LBA128 位置的 FSBLA 将会被忽略。
4 E2 M# l" \$ B/ w" S8 w/ I 29.png 9 B: F2 h; [& ~4 A2 Z
▲ 图 28 镜像在 SDCard 中的 Layout, S4 P# ]6 \9 I) s# r. T. S

2 K: c+ i4 ^1 _1 c6 f( o
需要注意的是,FSBLA 和 CUBE EXAMPLE 都需要加入 STM32 Header,才能被系统识别。STM32 Header 是 ROM CODE 加载二进制文件的必要格式,每一个被 ROM CODE 加载的二进制文件都需要在头部添加特定的 STM32 Header。STM32CubeMP13 开发包中提供了ImageHeader 工具,用于为项目二进制文件添加 STM32 Header。开发者不需要深究 STM32Header 的详细内容。
3 c1 g. \' X  h 30.png
  }- }' q1 S/ g( R8 x3 p
▲ 图 29 STM32 Header 信息' J8 w5 t( V; ^! C
$ g& o7 |+ X9 d, c& m* c( _& @% G
为用户程序加入 STM32 Header,可在工程配置的 post-build steps 中加入如下命令:  s& N6 P5 S- L8 H
“(path_to_STM32CubeMP13
7 B1 i+ v% \. |; G& P* t- Q4 }Package)/Utilities/ImageHeader/postbuild_STM32MP13.sh"
: T2 v' F8 z" g6 d. j. k. z"${gnu_tools_for_stm32_compiler_path}" ) C! @+ Y. q9 N- @
"${BuildArtifactFileBaseName}"
  v6 [0 _6 ]  t% k: }$ L3 ^
# B) l" O) w5 l9 N7 B

: x$ x4 N8 l( q# z重新编译完成后,即可生成打上 STM32 Header 的目标文件。
7 ^8 `7 F0 E: I 31.png * G+ X1 `+ n/ Z8 B3 |! Y
▲ 图 30 添加 Post-build 命令
- V/ c: o7 x& j/ s$ o3 r0 V6 a0 F  w; y9 A+ _" ]+ h! o) I  k) M# E
注:path_to_STM32CubeMP13 Package 为 STM32CubeMP13 开发包的存放路径。
6 J8 d; a8 p  p. J$ K2 r+ G( }5 ~. C' S
至此,已准备好待烧入 SDCard 的目标文件:
) |# S1 u) A/ t6 s7 u2 C! T) ?" ?- |1. 已添加 STM32 Header 的 FSBLA_Sdmmc 目标文件:FSBLA_Sdmmc1_A7_Signed.bin (即 FSBL)" P9 e0 b+ _$ }) G
2. 已添加 STM32 Header 的 CUBE EXAMPLE 目标文件:MP13_BSP_BasicTemplates.stm32(即用户工程)
* X6 ]- Y/ C: k
* b9 A8 |! T9 U5 S* _
烧录工程位于 STM32CubeMP13 开发包的如下目录:. P* j7 O  E' n
\Projects\STM32MP135C-DK\External_Loader,以二进制的方式提供了烧录时需要的两个引导文件,包括:
) z) B. o6 p' M" l; D1.STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32
0 l* u, F! G( _$ n+ t$ ]8 [2.SD_Ext_Loader.bin其中,STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32 为基于开源工程。0 A. Q2 j/ D+ e$ s, R3 ~

7 z/ K# x8 r0 }" [$ ~
& s& c! q# _5 `* v1 u' B
Openbootloader 实现的一套 IAP 应用,执行烧录流程管理。SD_Ext_Loader.bin 工程执行SDCard 设备的实际擦写操作。* S2 `4 @  B0 O/ L* ?% B* Z
( u& j2 Z' ]0 d* C

0 p% |) B* S6 _, ^目前,引导设备可支持 SDCard,QSPI NOR FLASH、EMMC 等,若项目开发中需要修改适配不同的存储设备,可联系 ST 窗口获取烧录工程源码。  j. e& ]4 h4 F- j3 X) {

9 u# [8 V% i; H/ y) M2 I. \9 E
将需要烧录的两个文件拷贝到 External_Loader 目录下,与烧录工程的两个文件存放在相同位置,然后修改 tsv 文件。完成后,目录中文件列表和 tsv 文件内容如图所示。5 i# G1 f: I9 K2 i
32.png
1 F$ ^0 a% k" J& Y, J- o8 A% \
▲ 图 31 烧录文件列表
4 L5 U9 @% Z1 J* u 33.png 5 V7 c1 Y9 E! [, I# q
▲ 图 32 tsv 文件内容
/ M+ `" L, K, P
: |* K* T4 y4 C3 U) d
4 ^. U+ ]4 P# ^$ O' w% H6 _
接下来,即可使用 STM32CubeProg 进行镜像烧录。可支持通过 USB 或 UART 连接,不支持通过 ST-LINK 连接。这里以 UART 连接为例:
# q$ W; F" D2 y7 Q7 ?- ~1. 开发板跳线设置到 000 并上电
$ g" U/ W6 a: I7 D1 O# f: z2. 连接 MicroUSB 口,查看 COM 号。注意通过串口连接时需要断开 USB OTG
: ^6 |! e7 ?; ]7 k* T3. STM32CubeProgrammer 选择连接方式为 UART,选择相应 COM 口
0 j0 Y$ _. m( X; q6 u+ Q4. 点击 Connect 连接3 P) W0 S) A6 R
34.png
+ J* e+ Y( M3 s! b: e
; V9 s; [1 z+ z0 H# f& [, w 35.png   q8 O' U4 U* e# I. I8 b% H
5. 点击 Open File,选择 FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件
. n# A: O$ ~; K" ~3 x! R6. 点击 Browse,选择目标文件夹:\Projects\STM32MP135C DK\External_Loader\SD_Ext_Loader8 |9 A# q( v: Y6 p! N7 D9 l$ H3 T! K
7. 点击 Download,开始下载镜像
, C5 B. V4 d6 R7 L* b 36.png + }2 P- ^) V8 U: z4 D
, I  ~0 m7 ~7 f1 ?9 w
37.png
- M) O) S1 b5 i, n/ c. Z7 t; h) T# O7 }$ ^$ Q) f
8. 等待烧录完成
. w, S4 D" k; L4 o9 V9. 将板子断电,boot mode 切换至 SDCard 启动8 m) Q5 G% m% h
10. 重新上电,即可引导启动$ w) t' n; q' e
38.png
1 |+ |; I- D: j$ o" o2 B- {! z: z% I: f$ Y! e6 w& E
转载自:STM324 x( l9 W! N0 |
& C  s$ U( Q5 q. p

, Q% W* V" d  [* I  |& v
收藏 评论0 发布时间:2024-11-22 19:09

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版