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

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

[复制链接]
STMCU小助手 发布时间:2024-11-22 19:09
01 引言
* E% @7 t, _5 \9 Q& oSTM32MP13x 系列 MPU 是 STM32 Arm®Cortex® MPU 家族中的一部分,它拥有单核Cortex®-A7 核心,支持核心频率 650MHz~1GHz,不仅能够轻松运行 Linux 操作系统,还同时提供官方 HAL 库,用于支持基于 RTOS 或无 OS 的项目方案,即裸跑应用程序。
2 @2 g0 W) e& W% q: R5 b; S, s
# V3 X# u5 V5 m2 ?. P6 k
本应用文档将就以下几个部分简述如何在 STM32MP13 系列 MPU 上开始无 OS 项目的开发:# W% r" E5 _2 d
• STM32MP13x Baremetal 开发环境简介4 t* ~+ ]$ x/ j7 k: Z
• STM32MP13x 工程的创建3 N& @, }0 f, r( C5 M7 I8 f  Z
• STM32MP13x 工程的在线调试
4 N% L2 o. A9 i5 `* s  h/ f5 w• 镜像烧录及从外部 Flash 启动
/ L3 Z! y4 s9 Y: {- O. b

, L. z5 N7 c3 z6 }" ^: I* [# q2 J02 STM32MP13x Baremetal 开发环境简介$ j2 l4 R$ j) S! C: ?
2.1 开发工具及环境
# ~7 u3 V8 Q) o2 j. B5 p" |STM32MP13x Baremetal 开发工具主要包括:1 ^& O) {& x. J" w9 r
1. 烧录工具:STM32CubeProg ( 版本大于 v2.15.0)
# q+ q' m3 J" ]7 }0 _  _2. 配置工具:STM32CubeMX (版本大于 v6.10.0)+ Z; n6 }- c0 K* `) b
3. 开发调试工具:IAR(版本大于 v9.50),或 STM32CubeIDE(版本大于 v1.14)
$ m# @# m- f( V$ ~, C% g本文示例基于 STM32CubeIDE 开发调试工具。
  k  \# b: O# P: ?; ?6 \2 L4 J8 F/ q

( J! _% U( y' L% ]  Y2.2 STM32CubeMP13 开发包& X+ {. q: U4 w  L3 T( y
STM32CubeMP13 开发包同步发布于 ST 官网 www.st.com 和 github.com,可通过如下方式下载:
: \1 u' r, O5 i& f2 A4 L  J1. ST 官网下载链接
) ^% `! S' W- }8 B9 t& c8 P2. Github 仓库链接" R- h5 p+ H3 g5 n
3. 通过 STM32CubeMx 软件下载
7 m- M! ]6 G1 {$ H4 Z) a, l3 a) o! X( P: h) e8 H- B
2.2.1. STM32CubeMP13 开发包总览
8 X6 X+ ^9 y3 g( V" s9 A) V+ ASTM32CubeMP13 开发包运行在 Arm® Cortex®-A7 处理器上,由以下三部分组成:  C/ F4 }* k+ L6 p6 P
• Level 0:驱动程序,包含 HAL、LL、BSP、CMSIS
9 [7 X& V  }; b$ X/ a• Level 1:中间件,包含 Eclipse ThreadX(原 AzureRTOS),USB Host & Device 库
. J6 t- X4 f! y; C/ s! f( r. y3 x• Level 2:包含各种板级示例程序  z0 m9 j& [; e# v" S% `2 E( g
除此之外,还包括一些工具助手等。
' F: F- E0 j* A, n, I; T" S  r6 z! G
8 T2 V9 x% n- d  C  z. I7 q( I9 M
1.png
5 ?2 n$ x8 l3 m( g
▲ 图 1 Baremetal 开发包源码框架+ p. T7 R$ N% o$ P$ H# ~
. p4 A: W. j* o4 I# S+ i; Y
+ m8 b2 o" J0 j) N. ^9 r% S) G
2.2.2. 源码目录结构
0 f1 T2 Q* G0 q: H 2.png / A6 L) e, ^2 V
▲ 图 2 Baremetal 开发包源码目录: B2 a5 C) e  D  u1 W8 H

$ C8 c& I$ S( w
2.2.3. 开发包支持模块列表
% ~, S2 ]6 {8 l6 {4 O1 j" w已支持的 HAL drivers :) p' w+ U9 a+ {$ S
• 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
9 w4 H2 P' Z/ e# [5 a1 o  N, z" V3 G) W' @: ^5 u
已支持的 LL drivers :# a$ U6 g" {' s3 i1 Q/ U' `
• ADC, DMA/DMAMUX, EXTI, ETZPC, GPIO, I2C, LPTIM, MDMA, PWR, RCC & BUS, RTC, SPI, TIM, USART
# W5 x: Q( r9 a$ k( j( j5 m. Z' V, H
BSP 与 BSP 组件:
8 x& w. t' t  Q2 S) Q' _• 基于 HAL 封装了更高一级的 API,为 LED、按钮、相机、LCD、SD 卡和 COM 端口提供 API,包含了以下一些外围器件的驱动:GC2145, LAN8742, MCP23x17, RK043FN48H, STMIPID02
5 `- ]% {$ i$ O7 P2 X( o
  M; @3 @% ~/ T5 P" e6 B, P+ [
中间件程序:1 K1 P9 u6 D' h
• 包含一系列支持某种服务的库文件及接口文件,目前已支持:Eclipse ThreadX(原 AzureRTOS),STM32_USB_Device_Library,
9 q3 O# M1 ~, u1 _* j0 k; D- XSTM32_USB_Host_Library
; s; _5 g# |. m5 g# b
$ v0 \# j) Y0 G' x/ J( U
项目工程:7 \4 f. n% I8 ~6 |
• Examples:基于 HAL 接口的简单示例,没有中间件功能。: X* F0 s# g- \# Z
• Applications:较完整的工程应用实例,包含中间件功能。
# {, a" [1 e) r' w1 `9 x• External_Loader: 烧录镜像及从外部存储器启动的应用示例。' [9 x7 X9 y) r1 [3 @
• Template: 板级工程应用框架。
- h! Q1 B/ D& A6 I4 n, F( P# B: j& Z! b4 V8 `
实用工具:
: p( g, {3 M- c8 c/ U• Imageheader:用于添加 stm32 头,支持存储设备启动。8 q! D' C' N* m) m
• Fonts:提供了一组用于显示的标准字体,包括 font8,font12,font16,font20,font241 X& X3 T) M% w
( ~: f) e- E4 ]

$ s, Q2 R1 h; u# A/ s) q03 STM32MP13x 工程的创建
' _$ T8 N' R3 |0 tSTM32MP13x 工程创建,可通过以下两种方式:: G/ C) l" S0 @$ G, y
1. 使用 STM32CubeMx 配置并生成项目框架代码,并基于该框架代码开发应用。" W5 f+ h0 n/ e5 j4 K& g. v) x
2. 导入 STM32CubeMP13 开发包示例工程代码,并基于该示例代码开发应用。
( h6 y1 N! z5 D9 [2 C2 ~9 L% q6 i6 s* D' ^& b; @5 o9 E9 L& f
3.1. 从 STM32CubeMX 创建工程/ e: |% x7 B& _: p
STM32CubeMX 是 STM32Cube 工具家族中的一员,它采用简单易用的图形界面,可以帮助开发者快速配置硬件和软件。可支持从 MCU/MPU 选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置等,并可生成适用的 C 代码项目。8 K. D4 n' g$ a0 c# w
0 Q- Y) S8 R) H* y, j: J6 k& }
本章节简述如何通过 STM32CubeMx 生成适用于 STM32MP13x 的裸跑应用框架。使用该方式无需提前下载 STM32CubeMP13 开发包,STM32CubeMx 可自动联网下载。5 g! @8 P+ |6 P+ _6 J
1. 打开 STM32CubeMX,点击 ACCESS TO MCU SELECTOR,
$ f( @7 N5 i7 `  W" Y2. 在搜索框中输入 STM32MP13 相应料号,如:STM32MP135FAF7,双击打开配置窗口, O& h9 X7 g5 r! L4 ^0 [. Z8 E
3. 弹框选择 MP13 Bare Metal,将生成 bare metal 工程框架。3 z; Z# O4 i& [, X; M' O! L# ~
3.png
& U' f, k2 N# K- d2 ]

9 F" m( `2 b$ b7 @  R* F8 j▲ 图 3 STM32CubeMx 选择器件) s/ L% x. _7 o/ a
4.png , I: R' V, m8 V3 F' V
* P2 r, b6 i/ X8 z9 w3 B
▲ 图 4 STM32CubeMx 选择工程类型% z. F0 |: m* c3 [$ R
- h* V, B/ N3 d/ a$ L. z5 `3 C

* }6 W' S; U' w4. 切换到 Project Manager 标签页,输入工程名称。3 `# Z4 d( ~/ C$ I8 Z; U, a
5. 在此页进行项目选项配置,可保持默认。' e7 O8 ]0 u/ l7 _0 k
5.png & t+ j: j+ i& \5 A1 r

2 I& ~4 u: l+ l▲ 图 5 STM32CubeMx 工程设置页面0 l: [% x6 Y5 u
: ]  O8 T' _1 L8 [1 p% h/ L! [
5 ]3 E- [) c5 x- O; H1 v3 Z
6. 回到 Pinout & Configuration 标签页。
- ^+ y7 |' N, W! i% u! l% F, M- t7. 使能 RCC 和 DDR。
+ g3 f) t! L; F8 Q3 q8. 配置各外设总线,配置方法与其他 STM32 MCU 相同(也可参考 Help -> Docs & Resources)
+ s# W2 R( R: i6 X1 c* d$ ]* |; A! o% I3 Y

4 t0 {& L7 S0 V: @( k% U# I
* g9 k* H8 P+ a; z* g$ j
6.png
$ L5 }* t+ z" u; p! C0 N  F

1 k* F% w2 Q1 u4 @▲ 图 6 STM32CubeMx 外设配置页面
# q: p% t( n$ w; Q9 e( |5 c8 t/ v/ H0 \; A# B6 j

& r, W$ c' o2 v9. 切换到 Clock Configuration 标签页。
" |* {# @2 z% [4 ?+ V10. 若软件报告时钟错误,可点击 Yes 自动修复。2 k. f* {* C, D) n1 |
11. 输入 CPU、DDR、总线等的工作频率,系统会自动匹配合适参数。
( i2 x5 G- t( z' e3 c* d
* Z8 j" R. x( Y& c' }
7.png , ^# f& O- ?8 C/ `4 m4 b
▲ 图 7 STM32CubeMx 时钟配置页面
8 Q# b9 l# n3 }3 D( t# W% _6 ?1 x$ Z3 P4 z$ U3 a1 ^

7 F; b. M! p9 w7 [$ Z! T* [12. 所有外设配置完成,即可点击 GENERATE CODE,开始生成工程代码。2 P$ b- T; T( d* K8 h6 T0 D4 d
13. 若第一次使用,软件将提示是否下载 STM32CubeMP13 开发包,可点击“yes”,软件自动联网下载前述 STM32CubeMP13 开发包。0 U' C: I+ b. k! ]1 |
14. 生成完成后,可直接点击 Open Project,将打开 STM32CubeIDE 工程。4 ]$ r7 ?+ L4 s5 o
8.png ( C9 u% Q: y: Q9 P- T  R
2 @4 ]# j  f% b2 w. m. A
▲ 图 8 STM32CubeMx 代码生成页面
8 O3 ~" k. K4 e1 ] 9.png 1 v9 {0 h5 `# ?4 R
▲ 图 9 STM32CubeMx 完成代码生成页面6 X8 _9 u4 S: t0 \- z2 e$ y; G
10.png 1 Y6 Z; q5 G9 z
▲ 图 10 STM32CubeMx 生成工程代码示例! X# w" D: R: S# g0 ?
: F$ W" O+ x2 f4 o( D$ |  ^
15. 至此,工程框架已生成,可通过 STM32CubeIDE 进行用户代码的编辑、编译、调试。
+ Y1 I$ u2 K$ ?0 }7 g; O$ ~( {. b+ n1 g( e

! [; D1 c( r7 p' c0 B8 G5 b3.2. 从 STM32CubeMP13 开发包导入工程
5 H  J% V2 H2 p! |( S若已事先通过 ST 官方网站或 Github 下载了 STM32CubeMP13 软件开发包,也可导入开发包中的工程示例代码,从示例代码开始进行项目开发。2 v# E7 f4 s* [1 I1 i

6 _. |8 y6 D% s$ \' d5 T
这里以 FSBLA_Sdmmc1 工程为例。% X# j0 |7 y0 Y$ a
项目路径:\Projects\STM32MP135C-DK\Applications\FSBLA\FSBLA_Sdmmc1
' x+ J9 k# A0 s, e& }# X1. 打开 STM32CubeIDE,导入 project0 B% ~; w* I5 T& l" w9 A' x
2. 点击 Files -> Import…' G$ j9 \) {6 M( J
11.png 7 Z0 J. c  C7 t5 A7 y/ ^
▲ 图 11 STM32CubeIDE 右键项目菜单
5 E' l4 Z* V' Z  P6 ~8 h( c4 I* j( M9 t' p! X
. U: ]2 F2 o' Q% @
3. 选择 Existing Projects into Workspace$ K) ^: Y3 @5 Q/ R+ x" {6 w8 v6 \
4. 点击 Next>
. N. V( j) X. R9 ` 12.png . _9 w- l  g! Z$ V8 Y; Q- |0 L
# d8 y- _& {$ y9 }6 ?% }
▲ 图 12 STM32CubeIDE 导入已存在项目
  n+ U9 p' ?5 ~- H
2 r8 I3 k, r* r9 H. |* V
$ N; H+ R; V' d, [
5.点击 Browse…,找到目录 \Projects\STM32MP135C-DK\Applications\FSBLA
2 N/ I1 i3 O1 v, q7 l- v# q6. 选中 FSBLA_Sdmmc1_A7 工程
0 x: U- {* R4 ?- g' x1 b$ y( h7. 点击 Finish,导入 Project
1 O/ {5 z- L  B) u8 ]% | 13.png
4 u1 I+ Q' b, t" t

7 {! e% s. ~- y) h▲ 图 13 STM32CubeIDE 选择导入项目
8 e9 w9 T, E! c
* u3 T+ s' H$ l9 `4 p) \
$ ]5 T: ^4 o% W; {0 Q- K
8. 工程导入完成。+ O/ `' l2 d- h. w% ?$ q. _% u

* D- L. f. x. Y. [

. k, \- A. h  k' f0 b# v) [9 L04 STM32MP13x 工程的在线调试
8 s) P* s. w& u+ g5 G4 l( A工程创建完成后,接下来本章节将介绍如何基于 STM32CubeIDE 进行工程编译及在线调试。
! U8 H, A+ Y+ y+ M4 H* x" W
* ~8 x- ?6 V* T8 J- W5 ]7 g
STM32MP135 内部包含 128KByte SYSRAM,若代码小于 128KByte,可直接运行于内部SYSRAM 中,适用于验证一些简单的外设实例。若代码大于 128KByte,则需要将程序运行于DDR 中。下面将分别阐述。
$ I) d! l# O( W: I: m- u: ^( {

, w1 Z6 L: N& v2 R4.1. 在 SYSRAM 中调试程序9 C1 P# b6 m, o& ^
仍以前述导入的 FSBLA_Sdmmc1_A7 工程为例。+ X# U- \% a, L: m
1. 首先,将开发板切换到工程模式6 {+ O$ D' K- w, W4 L
2. 连接 Type-C 电源3. 连接 MicroUSB,这里板载已支持 ST-Link
" m! ?6 |4 n* e" U 14.png 7 `4 Z, a: H' \; f: f. i0 O
! A7 d7 u* h) |% ^2 r* u
▲ 图 14 开发板切换工程模式0 H# U/ F0 a8 ^- c- o  ]

' E" X6 u" K& ~
4. 右键项目工程名称,选择 Build Project,完成编译。
( i% N3 C( n$ I 15.png 6 p( Y- P# J* e9 z6 d) T" k

5 V# G/ \, _: d. x' l0 A: E▲ 图 15 选择编译工程
% ^5 U/ B1 h; [9 T' I
2 w* @4 e5 {' j8 q8 Z# c6 q

* r) O$ ?! p: ^' P5. 右键工程名称,选择 Debug As -> STM32 C/C++ Application. d& R# |2 f! F3 W
16.png 7 Y6 ]3 n% o1 b4 N  {
. n4 u( P5 u" A1 f9 h0 R
▲ 图 16 选择调试项目方法 1+ I; b* q: r: a  Y5 i) o/ p
6. 或点击 Debug 图标. Z: W! t$ ?  k! C8 }3 S& ]  l; @
7. 进入 Debug Configurations….
7 |! f8 {3 d" j  i9 a 17.png # s+ U% Y, z- x; l
, N; i3 P; i8 F  _+ a3 \) }! k' \, W
▲图 17 选择调试项目方法 2- J" R, v* M0 t- r
, r5 }/ J/ m3 @3 @' G& Q% F
; m. T  U8 N: M' e( f0 n
8. 进入调试配置菜单) S1 Y4 S( V/ D, A) e5 p
18.png + k- S4 v; c4 k
( K+ x% r8 ^( ]* R' o# X2 _. W
▲图 18 调试配置页面! {2 B6 o+ s$ g
+ i" ~3 L! ~$ ?' a- U' Z
9 O8 ^8 O: [8 {  {7 ~
19.png   i* Y7 G% q+ u5 s

% W4 T( J! m. q7 @% A/ K& u2 h% p+ U* f8 x

1 F0 v! P- ^; L$ q1 w2 j; `9 k4 C9. 即可像 MCU 一样调试您的代码。% G! |2 S4 j  Y; w, u
20.png & r( m, Y" W4 |0 E6 t7 C" `1 M0 D
/ i: _1 p$ r! w* s, V$ b" D
▲图 19 项目调试窗口; r1 V$ B- c3 P$ ]4 S/ x" U

$ i7 J9 W1 z/ u" `: w: S! W4.2. 在 DDR 中调试程序
7 e( q4 O9 T4 x$ R& ~5 e当代码量超过 SYSRAM(128KB)的大小时,需要将程序运行在 DDR。这里以 BSP_BasicTemplates 工程为例展示如何开发运行于 DDR 的用户程序、
$ P2 \$ n  N0 P+ n8 w% g. n& e; n; r. ?; Q  q$ k8 q
1. 首先,按照前述方法导入项目工程7 s+ F+ k0 `; h; W5 x! B2 n' T  i
21.png 7 c! v: }# Q" @
: a( b# K; @% b& V; f' ^) I
▲图 20 导入 Templates 工程5 \6 Q, A& x: ^. s% z: W8 A

4 X2 t; n# O2 R. f0 o- j. O
7 p% e# m$ K% G
2. 打开 C/C++ Build 配置; V' g0 O2 Z8 I
3. 在 Preprocessor 中添加 USE_DDR 宏定义% G+ Y4 n5 K4 U+ F
22.png
/ x& F' x% `+ I, Y$ ]
, D/ v6 Z8 F: b! d0 Q
▲图 21 使能 DDR 宏5 X' u! E/ N. h5 L! Q, e

/ G; Q+ C' C8 A, b0 J: [
5 g; C& K! J5 l1 R, O' {9 n
4. 修改链接文件,重命名为 “stm32mp13xx_a7_ddr.ld”) [! W: c: n3 t& i
5. 修改 REGION_ALIAS 定义到 DDR 区域:
9 X4 N1 L3 O4 p, X6. 重新编译后,目标文件将链接到 DDR
  i% r3 s3 g8 z 23.png
: j& F) ]2 l$ h; E/ Q$ |4 v

5 q, v# T# D$ u( K▲图 22 修改链接空间
5 c8 A2 M8 C  h4 Z  y: c 24.png ' Q/ Z  _0 Q% C8 r+ y
5 u- X  R! r" Y7 Y0 o
▲图 23 选择链接文件  g4 y; E" N1 X0 J: s
5 N# A* A4 T5 i
7. 在调试之前需要先运行 DDR_Init 对 DDR 进行初始化, \. o% q0 d' @1 [
8. 按照前述方法导入 DDR_Init 工程,编译后全速运行一次,并保持开发板不掉电项目路径:\STM32MP135C-DK\Examples\DDR\DDR_Init
3 J& ~: Q9 ^$ Q6 e. X* g: c% S 25.png # _9 o, f0 M) @7 F- j

2 a8 t; o  m8 E: F▲ 图 24 运行 DDR 初始化0 ]: @* V' |; K  ~9 _$ c( Z

" A4 E% r) o% j7 @6 M

0 m& K9 j& j$ a* y9. 回到 BSP_BasicTemplates 工程。
: x0 Q; N- s# J- I10. 在 Debug configuration 对话框中,将 Startup 页面的 monitor reset 删除。* B6 \" ?% V; e( x% ^" \
26.png
7 K8 F3 Y8 X" L* L8 Z( L  u
. Y' m4 N, H- \" I$ H
▲ 图 25 修改调试参数
) S# m. f% {: W; A9 c2 c  r; r& ?" X! S- Y8 f. X# t1 b' t, g% B
0 ]7 X2 T% Z( k  Q
11. 点击 Debug 进入调试' T% M7 C* x1 \# N; i
12. 可以看到当前 main 函数的地址已经为 0xC000 开头的 DDR 位置$ }) y# ^1 P, O; T$ ~8 s/ {) n* u

+ ^% i! a( p# t' s
2 K- M. i; Z( ?3 L% p
27.png
7 `" c- {* K. U/ _

' S) E% I- X. ~# r: j▲ 图 26 在 DDR 中调试工程$ s* i; X9 r3 F' m

/ \! F9 w0 y. H5 O* E# k! ^

* F: ?9 J+ ~/ X" F05 从外部 Flash 启动# Z8 r2 s+ I4 B9 ~8 q& o
28.png ; o1 ~: C. T7 K) F% i& Z- t
. x/ E' H, e6 m' `1 }. }
▲ 图 27 STM32MP13 启动流程
; d% I6 Y& ^# D. B8 l
0 S+ E/ z* x- y, x4 O+ Y
从外部 flash 引导 STM32MP13, 一般需要包含两个部分源码。如上图所示,芯片上电后,首先运行内部固化的一段 ROM CODE,ROM CODE 从用户配置的启动器件中寻找 FSBLA,并将其拷贝至 SYSRAM 中,FSBLA 运行后,执行 DDR 初始化及用户代码(CUBE EXAMPLE)拷贝到 DDR 中,最终实现跳转到 DDR 中运行用户程序的目的。
9 g. Q( c. {* r7 ]9 |; d; l" q2 t  K) x& d0 q
这里以 SDCard 启动为例,在第三章节中,我们编译调试的 FSBLA_Sdmmc1_A7 工程,即实现了 FSBLA 部分的功能,BSP_BasicTemplates 工程为实际开发的用户项目。完成启动需要将这两个工程生成的镜像文件都烧录到 SDCard 中。% d7 [" `5 o, S2 ~7 o  U9 N$ Y3 o

3 e  i* ~+ J, G7 d- d/ \
• FSBLA 需烧录到 SDCard 的固定位置 LBA128 或 LBA640,ROM CODE 固定从这两个位置寻找 FSBLA。
9 }, k$ N3 ?$ I  h• CUBE EXAMPLE 的存放位置可在 FSBLA 程序中修改,默认为 SDCard 的 LBA640。3 M% ]; e1 j$ k4 t/ _0 {# z, _! p4 {
• 如果有烧录过 OpenSTLinux 的卡,需先格式化。原因是 ROM Code 优先从 GPT 分区表中寻找 FSBLA,若分区表存在,新烧录到 LBA128 位置的 FSBLA 将会被忽略。1 i; ~) u: b$ j- x# N' o& G& f
29.png . t) M- ^* N, w2 I
▲ 图 28 镜像在 SDCard 中的 Layout* ]6 }6 O4 x; {6 {7 y8 a9 S8 ]+ }
2 [. j" }0 M5 u* U' I8 c* `' Q0 g
需要注意的是,FSBLA 和 CUBE EXAMPLE 都需要加入 STM32 Header,才能被系统识别。STM32 Header 是 ROM CODE 加载二进制文件的必要格式,每一个被 ROM CODE 加载的二进制文件都需要在头部添加特定的 STM32 Header。STM32CubeMP13 开发包中提供了ImageHeader 工具,用于为项目二进制文件添加 STM32 Header。开发者不需要深究 STM32Header 的详细内容。
( [; s1 n( G5 h 30.png
$ \3 I/ Z7 X% a' L
▲ 图 29 STM32 Header 信息
( x5 J$ Q5 c$ V, c- a" S6 L5 w' I( J# A0 e( q) N8 [5 k2 Y
为用户程序加入 STM32 Header,可在工程配置的 post-build steps 中加入如下命令:3 `0 V5 Q9 t- u& [: i: o) \
“(path_to_STM32CubeMP132 f. i2 t4 J. S
Package)/Utilities/ImageHeader/postbuild_STM32MP13.sh"
9 ?; B- e7 [/ h. Q! H7 _  V$ \"${gnu_tools_for_stm32_compiler_path}"
3 [$ p% g; i8 H9 V"${BuildArtifactFileBaseName}"* q, k) U" `5 O- u1 L

5 E0 \' p0 w% d) H
5 t% k& E4 g9 t" E! Y
重新编译完成后,即可生成打上 STM32 Header 的目标文件。% _. \& Q1 @8 P
31.png
$ c) V" s4 ?; X" @9 r" b3 ^3 d, p0 D' G% g& i
▲ 图 30 添加 Post-build 命令
* b- ?& K; C! g2 V* C, d1 [
6 S  b- [/ Q5 U! ^3 B. B注:path_to_STM32CubeMP13 Package 为 STM32CubeMP13 开发包的存放路径。
, E7 i; \, l8 |* ^7 c& p) U, I; w0 {0 X( P1 u+ F: w/ G
至此,已准备好待烧入 SDCard 的目标文件:& V  E$ S* ?# ?0 _  h- Y
1. 已添加 STM32 Header 的 FSBLA_Sdmmc 目标文件:FSBLA_Sdmmc1_A7_Signed.bin (即 FSBL)
/ r" f% b; E7 m7 v& {( [2. 已添加 STM32 Header 的 CUBE EXAMPLE 目标文件:MP13_BSP_BasicTemplates.stm32(即用户工程)4 c2 }4 f+ h1 v

2 H' R  x4 S! Y0 K( w4 p) g
烧录工程位于 STM32CubeMP13 开发包的如下目录:
6 ]0 ?+ S, H5 J* h8 A. }4 y3 f$ a\Projects\STM32MP135C-DK\External_Loader,以二进制的方式提供了烧录时需要的两个引导文件,包括:# _5 J! k/ Y9 B" Y5 T
1.STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32" j4 K* U4 W# h0 ?0 L
2.SD_Ext_Loader.bin其中,STM32PRGFW_UTIL_MP13xx_CP_Serial_Boot.stm32 为基于开源工程。7 w- A: ?; K) F8 k& v
3 c$ K/ p2 ~1 q  s8 `
$ ?0 L0 i$ i/ `7 g# R
Openbootloader 实现的一套 IAP 应用,执行烧录流程管理。SD_Ext_Loader.bin 工程执行SDCard 设备的实际擦写操作。
# _! V# r+ N! V$ A9 S6 U5 ^- a" B. q6 M' w
* f# z2 a8 w5 |9 U2 e- o2 Q
目前,引导设备可支持 SDCard,QSPI NOR FLASH、EMMC 等,若项目开发中需要修改适配不同的存储设备,可联系 ST 窗口获取烧录工程源码。7 h; U% C0 z' D# I6 V# @

# `7 N; \, R' h: Z. n. u" y
将需要烧录的两个文件拷贝到 External_Loader 目录下,与烧录工程的两个文件存放在相同位置,然后修改 tsv 文件。完成后,目录中文件列表和 tsv 文件内容如图所示。- u$ l0 I1 F2 t* u8 h
32.png
, \8 q4 Z. g6 N. u8 E( }: O' R
▲ 图 31 烧录文件列表, w8 D4 a$ I; q0 P
33.png 6 W( m/ C' F# t% s; d# R' Y
▲ 图 32 tsv 文件内容
; O# I0 Y) C! ~% O6 B, x6 s% y; x& }" F1 }# F- ^

9 V5 G* m4 k' a7 E) d4 h* z接下来,即可使用 STM32CubeProg 进行镜像烧录。可支持通过 USB 或 UART 连接,不支持通过 ST-LINK 连接。这里以 UART 连接为例:. @) L5 \! D: \! p$ g
1. 开发板跳线设置到 000 并上电
1 b' w6 p0 O: Q8 {2. 连接 MicroUSB 口,查看 COM 号。注意通过串口连接时需要断开 USB OTG) ?8 F+ v9 y. o0 I
3. STM32CubeProgrammer 选择连接方式为 UART,选择相应 COM 口
0 r$ }8 C2 f- A; `8 d. H$ J4. 点击 Connect 连接
6 Y* b0 t! O5 `1 i# ^ 34.png 2 H  f* e4 y& p* e* \- h+ r

9 O% e& i% t  u6 b 35.png
6 N  q% Z- n4 J) W8 g- B5. 点击 Open File,选择 FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件( Q0 ?8 G/ A$ ^! j; L: k: {
6. 点击 Browse,选择目标文件夹:\Projects\STM32MP135C DK\External_Loader\SD_Ext_Loader$ G$ [1 V. [4 k8 h5 D0 \
7. 点击 Download,开始下载镜像
) Y6 i% f3 A: r& w: X- p 36.png 7 U9 `$ S& V: \- d0 F
6 c5 w" `  T# M8 Z& E# ]1 V1 k, _
37.png
& ^1 U3 [, D3 V$ ], X1 ~* `4 i" N; }# w
8. 等待烧录完成
* c; f2 N6 d) r$ O& }) @& D8 G5 y& V9. 将板子断电,boot mode 切换至 SDCard 启动0 n' t5 c% f) _: @" t
10. 重新上电,即可引导启动
+ J7 B, s' m* I- j: S+ y 38.png
* Q- Y1 x! ^" e
* z( f) t. c3 y7 Y转载自:STM323 ^  X" w1 l) w3 r/ `; L

, e6 M, \) Z* m4 ]$ }: w5 w# }# X. g& _  m
收藏 评论0 发布时间:2024-11-22 19:09

举报

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