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

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

[复制链接]
STMCU小助手 发布时间:2024-11-22 19:09
01 引言9 K6 G! r, ]% I7 m
STM32MP13x 系列 MPU 是 STM32 Arm®Cortex® MPU 家族中的一部分,它拥有单核Cortex®-A7 核心,支持核心频率 650MHz~1GHz,不仅能够轻松运行 Linux 操作系统,还同时提供官方 HAL 库,用于支持基于 RTOS 或无 OS 的项目方案,即裸跑应用程序。) J- N% k' d3 f9 {, W) f
# R/ t' B' ^. A( G
本应用文档将就以下几个部分简述如何在 STM32MP13 系列 MPU 上开始无 OS 项目的开发:
4 `9 `* r" g) V- {' P4 Q/ I7 t& _/ b: ]3 x• STM32MP13x Baremetal 开发环境简介
! r; ~4 `# _+ k* P! g$ h6 z• STM32MP13x 工程的创建6 y  U4 Y, b9 S  |/ J6 M% i% \* C
• STM32MP13x 工程的在线调试
8 T6 x7 E2 @8 ~# i  |• 镜像烧录及从外部 Flash 启动( t) n. L6 O6 q. S8 K+ e

/ L! f8 e3 h+ m$ G; Y3 v02 STM32MP13x Baremetal 开发环境简介. X2 ]0 m0 j5 T6 {9 f/ f
2.1 开发工具及环境7 s9 w8 b0 Z' H0 I* ?: e* X  q5 _
STM32MP13x Baremetal 开发工具主要包括:
8 V) |, c( J5 o1. 烧录工具:STM32CubeProg ( 版本大于 v2.15.0)# H5 G( o) |/ `" K$ _: u
2. 配置工具:STM32CubeMX (版本大于 v6.10.0)% q, s# k# {. }3 j( R1 l
3. 开发调试工具:IAR(版本大于 v9.50),或 STM32CubeIDE(版本大于 v1.14), Y0 @* G7 p' f2 ]& ?# j, O
本文示例基于 STM32CubeIDE 开发调试工具。4 F$ l' c8 D& s! s7 S- H
! B9 X" }' I$ M4 ^; Z4 q

1 K  N* m+ z. O2 a/ C7 U2.2 STM32CubeMP13 开发包  s/ e4 H, O5 f& b
STM32CubeMP13 开发包同步发布于 ST 官网 www.st.com 和 github.com,可通过如下方式下载:5 o* h1 V0 p" a' w' v
1. ST 官网下载链接: v) m  G& O6 ]' \) T8 s3 y
2. Github 仓库链接6 J; ?  U, U- U$ C3 P
3. 通过 STM32CubeMx 软件下载3 W' l2 Q4 K# o/ @

1 L) C0 a' y' J) W9 D3 F: M
2.2.1. STM32CubeMP13 开发包总览" y! e1 {, N2 c; Q& ^& K9 d7 A* ^
STM32CubeMP13 开发包运行在 Arm® Cortex®-A7 处理器上,由以下三部分组成:+ U& o" I* |6 l8 Q, R$ a! Q& x% V
• Level 0:驱动程序,包含 HAL、LL、BSP、CMSIS
% K! a2 D- m1 d( _• Level 1:中间件,包含 Eclipse ThreadX(原 AzureRTOS),USB Host & Device 库5 o- T; X; e; A/ O; v6 m
• Level 2:包含各种板级示例程序
4 ]% a0 E! m/ l1 G' C% u5 J除此之外,还包括一些工具助手等。# q1 k# R1 s& ?! S/ u* B
& }+ E  o" J0 d; ~( o; h- @
; \% G8 h3 @/ e: q3 {) a
1.png & n- ~. S) K8 x( Z6 O1 T& r. A
▲ 图 1 Baremetal 开发包源码框架7 e9 ^6 A! D% u1 y
" ?" X* M/ w+ D$ J# y, {3 t

2 d0 H+ y- m& m  t+ w! _2.2.2. 源码目录结构/ `# z+ F+ W# [3 N
2.png % t; F" W/ ]: P+ L: S
▲ 图 2 Baremetal 开发包源码目录
& l  d' y% C+ c. M( P4 K  S  G( ]
. K) h) N: q* k" \
2.2.3. 开发包支持模块列表, T* k1 G1 a# }6 N
已支持的 HAL drivers :
% b  U: F! e# A7 G/ }, I3 T: C• 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+ y3 ~7 R9 ~5 s5 L: h2 w

' M: A" q, Z  p0 q
已支持的 LL drivers :. B8 r: G2 R: y: I
• ADC, DMA/DMAMUX, EXTI, ETZPC, GPIO, I2C, LPTIM, MDMA, PWR, RCC & BUS, RTC, SPI, TIM, USART/ G+ e* D; L" s' w, U
- H7 w: H3 Q4 s) U9 a* z/ H
BSP 与 BSP 组件:4 x1 X. u9 S9 S
• 基于 HAL 封装了更高一级的 API,为 LED、按钮、相机、LCD、SD 卡和 COM 端口提供 API,包含了以下一些外围器件的驱动:GC2145, LAN8742, MCP23x17, RK043FN48H, STMIPID02+ k1 ^$ _5 F# |' H8 B+ B- E& a8 Q

# j" V/ x" M1 B( l
中间件程序:' z3 Q, V/ }1 }7 o
• 包含一系列支持某种服务的库文件及接口文件,目前已支持:Eclipse ThreadX(原 AzureRTOS),STM32_USB_Device_Library,& p! @/ P3 }+ X; N
STM32_USB_Host_Library
' F' F! B3 d0 p& w7 y: \. u- s$ p) i, p5 Q( N) d9 u7 W# A
项目工程:
) y8 B& X$ E/ n* E- [: z* n• Examples:基于 HAL 接口的简单示例,没有中间件功能。
" T/ ]. V. Q3 f• Applications:较完整的工程应用实例,包含中间件功能。
0 ^5 M7 r9 c+ ?" E• External_Loader: 烧录镜像及从外部存储器启动的应用示例。
2 I9 v& B. v/ Y2 e• Template: 板级工程应用框架。6 a0 K, ~( ^% a% Z
2 I* @& _8 N5 b  c/ W0 o
实用工具:/ U9 L: i! O! F
• Imageheader:用于添加 stm32 头,支持存储设备启动。: a, f9 Y! x  w
• Fonts:提供了一组用于显示的标准字体,包括 font8,font12,font16,font20,font24
6 L: _0 |+ c6 N0 c/ O. Z
. z% I& g% R% C% e, C

3 [$ C6 V) d" V( k5 K" @! |& }03 STM32MP13x 工程的创建
% N# L' p- z" J1 ZSTM32MP13x 工程创建,可通过以下两种方式:
4 r: H0 H! B) b* K7 k9 @) d+ w# ]1. 使用 STM32CubeMx 配置并生成项目框架代码,并基于该框架代码开发应用。) R1 [2 g2 i& J+ ^8 j! e
2. 导入 STM32CubeMP13 开发包示例工程代码,并基于该示例代码开发应用。
  l& \3 m  N- T- f0 t+ F3 e6 Y3 j
  E" d% |2 t+ `3.1. 从 STM32CubeMX 创建工程7 o. x6 _1 }. ^  k/ g: u7 i
STM32CubeMX 是 STM32Cube 工具家族中的一员,它采用简单易用的图形界面,可以帮助开发者快速配置硬件和软件。可支持从 MCU/MPU 选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置等,并可生成适用的 C 代码项目。8 c. I  k! Z- i9 z
* c. n. H: |, f% j
本章节简述如何通过 STM32CubeMx 生成适用于 STM32MP13x 的裸跑应用框架。使用该方式无需提前下载 STM32CubeMP13 开发包,STM32CubeMx 可自动联网下载。
% M9 b0 W1 k6 B7 s$ T. D2 H1. 打开 STM32CubeMX,点击 ACCESS TO MCU SELECTOR,: P/ S% k5 u, b7 T% S
2. 在搜索框中输入 STM32MP13 相应料号,如:STM32MP135FAF7,双击打开配置窗口9 `6 m* k! ]6 B7 V& p
3. 弹框选择 MP13 Bare Metal,将生成 bare metal 工程框架。" y: Q' e% ]$ R  m7 {0 n
3.png 6 P/ F. S+ p3 U7 V( x

  o4 }$ w4 Y' l, Q3 P5 I( v$ Z% S▲ 图 3 STM32CubeMx 选择器件! H; b4 T" G& ]% x  R
4.png ' m6 x/ \7 l, f  x) \& p4 v
' }7 l9 g0 e$ q/ U7 s2 F* N
▲ 图 4 STM32CubeMx 选择工程类型
' i6 n' ~4 I: K; ~2 w/ d$ |
0 @2 {+ R1 M; |" B/ Q; O

2 h& }1 @7 D$ w; R5 t4. 切换到 Project Manager 标签页,输入工程名称。4 B; j% T- r5 ]- G" @; @1 P% F
5. 在此页进行项目选项配置,可保持默认。
  x- Q) f4 i$ w1 u( F 5.png
" ?) y5 {, l) J% r1 f0 I! R& `
; }2 K0 G1 ]& y/ Q  Y
▲ 图 5 STM32CubeMx 工程设置页面* x$ y) q4 ?+ p: J# m# f0 M: s: O0 ~
2 K2 o/ z& Q9 s5 y

% Y+ ^% O6 {) b+ C; H/ b  ?1 u6. 回到 Pinout & Configuration 标签页。/ M9 J; @4 ~: P, X
7. 使能 RCC 和 DDR。
: C4 C0 \& f3 ?; u' p8. 配置各外设总线,配置方法与其他 STM32 MCU 相同(也可参考 Help -> Docs & Resources)
+ `6 ?0 y2 C) s) S1 y1 S* O- D4 H) [& @5 S9 f

  N6 H- z8 i$ R% D* |$ B" R0 T

' ~; s4 o& ^5 K  N* i 6.png
- C  [2 R% M( p4 V* M! h

/ {( d/ i9 ^' e# R0 @5 \$ [. A▲ 图 6 STM32CubeMx 外设配置页面
! J; [. \9 T7 N* v% r! o$ p
1 A& X& I' F+ ~9 ^  P

0 V# S4 y7 K  u' g9. 切换到 Clock Configuration 标签页。: t( c3 e; P* k2 C9 h; p
10. 若软件报告时钟错误,可点击 Yes 自动修复。
( E$ U# T8 {# Y/ R: ~# F8 T8 X11. 输入 CPU、DDR、总线等的工作频率,系统会自动匹配合适参数。
: z* }6 G: T2 Q
  @5 l4 c8 Z1 M& r3 |- u% A$ X
7.png ( i0 X; ?/ a- p8 v9 t
▲ 图 7 STM32CubeMx 时钟配置页面* x7 g, V* E! d( ~( i3 A& _+ G, a

! `% \9 |. {' t# t' x% s, S

$ |7 I+ q! U5 D" S/ q12. 所有外设配置完成,即可点击 GENERATE CODE,开始生成工程代码。6 m) m( d. b2 p4 T# B
13. 若第一次使用,软件将提示是否下载 STM32CubeMP13 开发包,可点击“yes”,软件自动联网下载前述 STM32CubeMP13 开发包。% g' R5 Y) ^5 \0 @& v
14. 生成完成后,可直接点击 Open Project,将打开 STM32CubeIDE 工程。; [4 U6 P, P" j+ j0 \/ e
8.png
8 t6 A5 z; i- N  r: |! X0 K

+ @' p/ W9 r1 d, q9 O7 V" A▲ 图 8 STM32CubeMx 代码生成页面
: i6 i. d) y- j/ m 9.png
% z/ H9 S$ A- ~3 m& q7 |
▲ 图 9 STM32CubeMx 完成代码生成页面/ v5 W, _2 g: G4 [9 W  O% v
10.png 3 {8 W2 I+ t/ ]& r, Z) E4 |
▲ 图 10 STM32CubeMx 生成工程代码示例
" e4 G1 r8 ^  K* x' j$ c1 i1 A- n+ M* h% c" K  W7 Y
15. 至此,工程框架已生成,可通过 STM32CubeIDE 进行用户代码的编辑、编译、调试。$ G- ~( t7 g, u* Y
2 f: w  s7 b: M2 m6 ~

' D  T/ k- j* v. g2 h- b3.2. 从 STM32CubeMP13 开发包导入工程6 X9 H* q, }2 X1 Z$ U+ C
若已事先通过 ST 官方网站或 Github 下载了 STM32CubeMP13 软件开发包,也可导入开发包中的工程示例代码,从示例代码开始进行项目开发。6 W( J6 x; l; u3 ~0 j

$ ?+ w0 P; v2 X# c9 v( E( w
这里以 FSBLA_Sdmmc1 工程为例。) f' c6 E6 H6 N
项目路径:\Projects\STM32MP135C-DK\Applications\FSBLA\FSBLA_Sdmmc1# j2 @# _3 B1 M# L/ A( @- D1 `
1. 打开 STM32CubeIDE,导入 project: ^, `1 X; L. u' @; z
2. 点击 Files -> Import…
6 {* m  ~! Q: S; H 11.png
4 h! |4 C9 a3 i$ q- v
▲ 图 11 STM32CubeIDE 右键项目菜单
% s9 y* P( J& E! o( W; g* }3 [$ D" X& [' g' s
! W& O# t# k9 l6 \8 @
3. 选择 Existing Projects into Workspace
6 F# |& J- F) X, x4. 点击 Next>
* t7 f- `- L( O 12.png
. }( ?2 o  p6 O( F4 c
; H# u! S, ?6 m0 O
▲ 图 12 STM32CubeIDE 导入已存在项目
1 o. z) i: [! J' w  N, V0 Y/ K4 Y6 E9 n: C0 J
! M3 k5 r  o: H4 u8 U( z6 s3 B% h
5.点击 Browse…,找到目录 \Projects\STM32MP135C-DK\Applications\FSBLA
, M' t9 E( a9 v+ W0 U+ ~6. 选中 FSBLA_Sdmmc1_A7 工程
# w9 R" t- N+ L- ^+ R7. 点击 Finish,导入 Project6 Z' r, @9 \  h0 I7 U6 @9 m
13.png * q' N  G) I) s& E3 H% G) P
) g* h- v- y) y, M! J* j7 H3 H
▲ 图 13 STM32CubeIDE 选择导入项目# S9 _0 M1 c. Y
0 Q7 ^; E, x0 i3 u8 G8 o) C2 f

9 K1 L' V: \# ~1 c" U) K1 r3 f8 i0 s6 o8. 工程导入完成。
, V* X. ^0 d  k/ X* k* [" X) t: d9 |1 }4 n
4 P5 j0 `" K& R( s
04 STM32MP13x 工程的在线调试$ r3 h6 n' i3 g% {5 Y& O% h) T
工程创建完成后,接下来本章节将介绍如何基于 STM32CubeIDE 进行工程编译及在线调试。: K: M/ s. m* s" p3 R) |

  Y2 k: D% A( V
STM32MP135 内部包含 128KByte SYSRAM,若代码小于 128KByte,可直接运行于内部SYSRAM 中,适用于验证一些简单的外设实例。若代码大于 128KByte,则需要将程序运行于DDR 中。下面将分别阐述。
% `$ l8 k6 u% d! o# K0 N

' u# z$ |5 k( e) c6 {1 M$ y  `# S, c4.1. 在 SYSRAM 中调试程序4 I: T( n, e( p0 u/ h  [# B) I
仍以前述导入的 FSBLA_Sdmmc1_A7 工程为例。
' K. p( }# X8 E% F) x1. 首先,将开发板切换到工程模式
( t5 ~4 d6 C" E2. 连接 Type-C 电源3. 连接 MicroUSB,这里板载已支持 ST-Link
: L( F+ g3 ]. T& W1 ^* L) C 14.png 7 ?: T8 ~4 K* r8 K( m& Q

% x& g7 Q2 v8 `▲ 图 14 开发板切换工程模式. }* F- b" ~7 m) L- C0 n& H

# V5 w+ F! m8 U0 K" D. A$ c
4. 右键项目工程名称,选择 Build Project,完成编译。9 k& G) d7 o- D
15.png
  \; A0 ?! u5 k) D" d' [

! w0 l4 n8 t' O▲ 图 15 选择编译工程* c# ^1 b  j. P) Z

: x+ J: B' S: E- ]
' V1 J7 a9 F3 H7 T! R
5. 右键工程名称,选择 Debug As -> STM32 C/C++ Application
9 H; X* \) W8 V' J 16.png
8 a4 ?, y, s4 `: ?. R7 x- r; o3 s

, M( R: o; E! u▲ 图 16 选择调试项目方法 1
/ [! [  l6 b% n  S" _; y+ a- K: M6. 或点击 Debug 图标  C3 x3 u5 }. h4 y( r* ?' N& }/ O: ]5 z
7. 进入 Debug Configurations….
9 V8 T" z& h' m1 I  N 17.png   }7 ]& @" `3 a  l. J  }: S

* o4 L' K; Q2 W0 C8 v6 A. z▲图 17 选择调试项目方法 2
$ T2 A; _  }1 @  z" n; w% r$ Z3 O; k* A/ G2 d% K, U
" u( y7 R/ {4 b5 p5 {% M# \
8. 进入调试配置菜单
) b2 o6 O( g$ v6 K, B 18.png 9 f9 H% ?) b: h! o3 Y# _( `
. @* y' s) e6 g- f
▲图 18 调试配置页面; {& \- S. G8 z

) _# t' E' I4 ?) D7 S4 u' @) r! h" d

7 m3 U) b* u0 s$ v& _+ C 19.png % j0 T# ~  m+ h1 c7 f" F
  E8 W$ a2 Z3 H
6 @$ Y# \' u4 K3 D6 s

2 w+ L6 X3 [/ o9 l" Z1 z: |+ E9. 即可像 MCU 一样调试您的代码。; [7 ]4 w* I; E/ _* Y$ {+ |
20.png
" Y. k' o. W2 G) C' K
. M7 B1 ?! C! }
▲图 19 项目调试窗口+ T5 {' O* j1 d8 c- E: n  d
0 Y; J: P* q; S' Z0 W2 T6 X4 h/ c
4.2. 在 DDR 中调试程序
& A' d* t% b/ X4 _8 \; o4 e当代码量超过 SYSRAM(128KB)的大小时,需要将程序运行在 DDR。这里以 BSP_BasicTemplates 工程为例展示如何开发运行于 DDR 的用户程序、" X0 r+ u, v+ @
0 w+ w' `6 ]/ x2 V6 B
1. 首先,按照前述方法导入项目工程/ a' L2 n* F1 ]. R5 b: g/ Z
21.png 8 p5 l6 T1 v, v6 C
0 L9 J2 }$ n2 g6 O6 ?0 N; z% G
▲图 20 导入 Templates 工程. z& R0 c: L  T9 M( Q

, k5 {/ J# k/ K5 b  U3 \
* H7 M* P  n5 f$ R
2. 打开 C/C++ Build 配置# [/ F0 a/ ?, r1 e6 p
3. 在 Preprocessor 中添加 USE_DDR 宏定义* k2 _6 m, V: `4 e) W* n
22.png
9 k& [' [& `1 H4 \  ?  D) _0 ^
% ~0 }0 N+ j5 A4 {) U" G( Z
▲图 21 使能 DDR 宏# S& Y' M, ]; h$ C
9 P! M; Q2 v$ |" S) _

: h# `; ~* }* G# O$ Q4. 修改链接文件,重命名为 “stm32mp13xx_a7_ddr.ld”; l# p" l; [' o3 f5 ?' |) {, ]
5. 修改 REGION_ALIAS 定义到 DDR 区域:) ~' U" P2 H4 y. M, C' b& E+ n- m
6. 重新编译后,目标文件将链接到 DDR
' j9 k, m: w) w( A% D5 X 23.png 6 I' w! j- V1 b+ H

8 s( k: n. z. Q7 T7 p  \: a/ o▲图 22 修改链接空间- F1 X. P; a& }; R2 o) ^
24.png
: a; {* S% g) c, p) |  \

* q( ~8 x+ S: A▲图 23 选择链接文件  \" a" V; }( r% |
7 ~; n3 r( T& v& n5 A0 y+ Z+ v
7. 在调试之前需要先运行 DDR_Init 对 DDR 进行初始化; _" m' e7 f! r: k* K* ?
8. 按照前述方法导入 DDR_Init 工程,编译后全速运行一次,并保持开发板不掉电项目路径:\STM32MP135C-DK\Examples\DDR\DDR_Init1 _" e  Z4 }- T. f7 k' t
25.png
9 P( k0 f: F( P# S
$ b6 X# y: @/ n" S3 |5 L: w
▲ 图 24 运行 DDR 初始化
; F5 @  J; S. |$ O1 \  Y- O  T6 E4 T" n/ u0 D1 x' C

3 s4 }0 ^4 p9 @- [9. 回到 BSP_BasicTemplates 工程。8 H& A4 P6 Q7 K
10. 在 Debug configuration 对话框中,将 Startup 页面的 monitor reset 删除。5 e' N3 x0 e3 z( h
26.png
$ t: S  H7 p7 t2 @( M

7 C) V  P7 @# v- s, Q: p! _5 @  n▲ 图 25 修改调试参数
7 |$ R, |- v0 c- v* m. o' i/ D7 h( r" m

( r/ _0 ?/ t( c, c3 v11. 点击 Debug 进入调试6 S1 c1 f: t4 m& {4 l3 |; v% d4 h
12. 可以看到当前 main 函数的地址已经为 0xC000 开头的 DDR 位置6 p# {. r5 c+ C) w2 M
5 |/ @+ D4 O0 I3 D

& Q) {+ J# b2 ~3 H$ m* | 27.png 5 f" q9 g: [) @2 ^% ~  l* x
' J: ~3 b- N0 J: K( S" H
▲ 图 26 在 DDR 中调试工程2 P6 s4 O2 ^! g% a$ H" g4 g, {
$ u* B+ r$ k8 E. o; @

8 D# y2 t! o" C' C2 Y7 Z05 从外部 Flash 启动
4 D$ Z6 `/ ^, P: a  } 28.png , O  N& x. t  @( W$ c" `' b, w% y

7 X/ v- A, F; A1 P7 _- Y$ \* N' Q▲ 图 27 STM32MP13 启动流程' K8 Q0 b. l" k- o- ^
" K+ p9 P8 F6 `7 H' H, J! I
从外部 flash 引导 STM32MP13, 一般需要包含两个部分源码。如上图所示,芯片上电后,首先运行内部固化的一段 ROM CODE,ROM CODE 从用户配置的启动器件中寻找 FSBLA,并将其拷贝至 SYSRAM 中,FSBLA 运行后,执行 DDR 初始化及用户代码(CUBE EXAMPLE)拷贝到 DDR 中,最终实现跳转到 DDR 中运行用户程序的目的。
9 H9 t; C7 W' i8 I
# N! I- A1 j; u5 J6 `0 D
这里以 SDCard 启动为例,在第三章节中,我们编译调试的 FSBLA_Sdmmc1_A7 工程,即实现了 FSBLA 部分的功能,BSP_BasicTemplates 工程为实际开发的用户项目。完成启动需要将这两个工程生成的镜像文件都烧录到 SDCard 中。& y5 g6 v+ C" G8 s* A

$ t- L1 O7 k' l9 |" g6 ?
• FSBLA 需烧录到 SDCard 的固定位置 LBA128 或 LBA640,ROM CODE 固定从这两个位置寻找 FSBLA。
* A$ P7 z- Z, o7 a• CUBE EXAMPLE 的存放位置可在 FSBLA 程序中修改,默认为 SDCard 的 LBA640。
9 X, i1 Y( \2 ~0 Q( ~• 如果有烧录过 OpenSTLinux 的卡,需先格式化。原因是 ROM Code 优先从 GPT 分区表中寻找 FSBLA,若分区表存在,新烧录到 LBA128 位置的 FSBLA 将会被忽略。
- z! W+ l! s' C- t, u1 e 29.png ( p/ U2 T: Y6 _2 |6 k0 M* w, q( a
▲ 图 28 镜像在 SDCard 中的 Layout# n# e, W5 c" i0 `0 ]4 [# Y

) z; b1 G; E1 C) J
需要注意的是,FSBLA 和 CUBE EXAMPLE 都需要加入 STM32 Header,才能被系统识别。STM32 Header 是 ROM CODE 加载二进制文件的必要格式,每一个被 ROM CODE 加载的二进制文件都需要在头部添加特定的 STM32 Header。STM32CubeMP13 开发包中提供了ImageHeader 工具,用于为项目二进制文件添加 STM32 Header。开发者不需要深究 STM32Header 的详细内容。
1 P, A2 U/ {/ P5 J 30.png
  ^8 K' I4 O  h$ z4 Q) [; t
▲ 图 29 STM32 Header 信息
4 d0 p& z* x/ i! S% }
5 O8 d: w+ }- L) `' [' K
为用户程序加入 STM32 Header,可在工程配置的 post-build steps 中加入如下命令:
, N3 J- J& j4 Y" v, g“(path_to_STM32CubeMP13
+ [" B9 L# s% A+ XPackage)/Utilities/ImageHeader/postbuild_STM32MP13.sh"
$ b3 H: i6 h3 M"${gnu_tools_for_stm32_compiler_path}" " R2 f  U+ x6 b* ]( v% ?
"${BuildArtifactFileBaseName}"
2 X1 ]9 j! D7 P1 u
) m) ]: D: i. c( G  J7 B0 i
7 U4 C' Z1 z/ I/ o
重新编译完成后,即可生成打上 STM32 Header 的目标文件。
& G! q' j$ U1 {* t 31.png
# m. ^, q' A( ?& D
▲ 图 30 添加 Post-build 命令3 p7 |- P+ t. v8 ~1 F

! q' Q0 f5 o  H) u  ~( R0 e注:path_to_STM32CubeMP13 Package 为 STM32CubeMP13 开发包的存放路径。
: [& l+ X3 z5 N2 E
) m. h/ Z' A4 J. B! X
至此,已准备好待烧入 SDCard 的目标文件:
$ l3 C: N! Q' _/ {" @( K2 n5 G! x, [1. 已添加 STM32 Header 的 FSBLA_Sdmmc 目标文件:FSBLA_Sdmmc1_A7_Signed.bin (即 FSBL)) y: q2 ]: s9 Y$ E' R) C
2. 已添加 STM32 Header 的 CUBE EXAMPLE 目标文件:MP13_BSP_BasicTemplates.stm32(即用户工程)
! E0 B, F$ @/ N* ?: e0 \& F; D% m6 _: @1 l/ O% B
烧录工程位于 STM32CubeMP13 开发包的如下目录:/ _! N/ ~# m2 f( _) z" E5 g5 ^
\Projects\STM32MP135C-DK\External_Loader,以二进制的方式提供了烧录时需要的两个引导文件,包括:; {( ^& z* I0 K# I1 l' o$ s- O* s2 Q
1.STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32* T# I6 S# G% M
2.SD_Ext_Loader.bin其中,STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32 为基于开源工程。
1 O/ x7 e8 X& d) j7 i( e; N6 \4 [* H+ w6 b
4 v8 [4 e* {3 g( L/ O- E( E9 t
Openbootloader 实现的一套 IAP 应用,执行烧录流程管理。SD_Ext_Loader.bin 工程执行SDCard 设备的实际擦写操作。6 O  h; r& ]: \% B

) ?+ Z- @9 x' ^+ {- v
. W6 ]7 |7 e# H5 v' A
目前,引导设备可支持 SDCard,QSPI NOR FLASH、EMMC 等,若项目开发中需要修改适配不同的存储设备,可联系 ST 窗口获取烧录工程源码。
& n/ d$ R, s  a! X& p/ `3 ^
8 x. ]5 ^- G& I) Y+ o
将需要烧录的两个文件拷贝到 External_Loader 目录下,与烧录工程的两个文件存放在相同位置,然后修改 tsv 文件。完成后,目录中文件列表和 tsv 文件内容如图所示。
' T, D# \/ {. q. v. D5 v( x( K 32.png ' A; h# ]% d# N  l8 t
▲ 图 31 烧录文件列表3 `9 T$ v; j* @1 q$ ~" G8 C: ^) I
33.png % Z' a- i+ d- }+ e9 h- H9 S# F
▲ 图 32 tsv 文件内容. U3 `! F0 F9 ^( D
4 r9 M& y& n( P9 |8 D$ K

: h4 M. G+ P$ l/ O6 q接下来,即可使用 STM32CubeProg 进行镜像烧录。可支持通过 USB 或 UART 连接,不支持通过 ST-LINK 连接。这里以 UART 连接为例:5 |, N7 i& x  F5 h9 k  e# [- Z
1. 开发板跳线设置到 000 并上电
- {' n2 R, {# q8 ]1 p" d; \0 s: j2. 连接 MicroUSB 口,查看 COM 号。注意通过串口连接时需要断开 USB OTG
, C% Y+ C0 i1 G: {; Y3. STM32CubeProgrammer 选择连接方式为 UART,选择相应 COM 口* X6 ?" R7 E! n
4. 点击 Connect 连接9 ~% J9 M" g& `) F3 J: g
34.png 3 r6 ?$ P- U8 J$ U4 i
2 [0 [; l0 i  }: d" Z" S
35.png
1 W% d, C" S3 T. j2 K) [, i5. 点击 Open File,选择 FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件
9 G0 W5 }( _/ z9 f6. 点击 Browse,选择目标文件夹:\Projects\STM32MP135C DK\External_Loader\SD_Ext_Loader
7 ^% A& ~. Z! z5 d4 R* x4 S7 M7. 点击 Download,开始下载镜像
2 ^6 ]0 v% J3 f1 ]8 N 36.png
, b* c; D. n% z! [$ p

- q" c7 ?8 `7 w$ z* R 37.png - u+ {0 v0 s4 Y- k

( n9 F7 Y* g7 W9 f7 p+ |! x8. 等待烧录完成
. `  J, c. c/ ]. k9. 将板子断电,boot mode 切换至 SDCard 启动
, k( [/ Q3 G7 s9 n( a5 d0 ~10. 重新上电,即可引导启动
0 W$ F' b4 V, c2 F/ r- B 38.png   i' u$ H/ b/ Z: T
% u7 [% {* l. {4 U; N% C5 Y# p( k
转载自:STM32; z3 H& c. Z/ y6 s. @" p
/ |/ B6 p: k3 w
% K0 A( g. x6 l4 g3 `. v
收藏 评论0 发布时间:2024-11-22 19:09

举报

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