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

工程师笔记 | 通过 STM32CubeMX制作外部Flash的烧写驱动 (.stdlr)

[复制链接]
STMCU小助手 发布时间:2021-1-7 16:35
工程师笔记 | 通过 STM32CubeMX制作外部Flash的烧写驱动 (.stdlr)
3 p/ L; Y) G& V- p
通过 STM32CubeMX
制作外部Flash的烧写驱动 (.stdlr)

6 ^/ B8 j( [' `: w, n. K
前言
目前,越来越多的应用需要扩展外部的Flash来满足存储需求。那么,在调试及批量生产的过程中,需要对外扩的Flash进行烧录操作。由于STM32 ST-LINK Utility以及STM32CubeProgrammer中,对Flash支持的型号有限,只能覆盖一部分MCU和Flash的型号,无法完全满足客户的需求。而且,它提供的external loader的制作模板存在覆盖的芯片型号较少,且无法前期QSPIFlash调试的问题。本文旨在提供一种通过stm32CubeMX制作external Flash loader的方法。客户可以根据自己的型号,进行定制化的生成。本文中,以某客户实际使用的MCU(STM32H750) 和Flash(S25LP128F) 为例进行讲解。

9 V0 h0 @& _, @  @8 G4 N: Q8 b
准备工作
l  安装STM32CubeIDE
l  安装MCU对应型号的HAL库
/ Q- }% ]3 o9 p5 \$ o7 e. P
External loader开发

- O2 ^1 `/ L: t% [  X% \4 p1 a) ]( ]
External Loader的开发分成三个部分,第一部分是使用STM32CubeMX进行工程的配置及生成。第二部分是外部Flash的驱动调试,主要包含初始化,擦除,写入以及读出等操作。第三部分调用驱动函数进行external loader的生成,包括外部Flash信息的定义,包括Flash容量的大小,page的大小,以及Sector相关的信息;第三步中external loader所需要的代码及对应器件的驱动,可以在下面的GitHub仓库中获取,同时也欢迎大家将自己调试好的器件驱动提交到该仓库。

2 f! [) J, e- O* T9 [7 K" K
5 C+ f6 {' X. l
使用STM32CubeMX生成工程
% s/ F! U! N* k* j4 K' e* K9 y/ t
此处,我们使用STM32CubeIDE集成的STM32CubeMX进行工程的配置和生成。

1 T" t' v1 v, a2 `: Z! @0 e
新建工程
选择对应的器件,填入工程名称,并选择存放位置:
) o; j4 b( r+ K
1.1.png
1.2.png

- l- ]) n1 n0 {( l+ t; L
管脚配置

5 X8 K1 K0 G7 O" \5 M
按照硬件原理图选择好对应的Flash管脚,此处选择为Bank2,配置如下图。注意调整管脚的速度为High,同时使能QSPI的中断。FlashSize值设置为N,Flash的大小配置2N+1。

: n$ M! c. Y/ j5 g$ n. |
1.3.png
, w( }0 E' x3 d  c' n9 y; V. G
1.4.png
' V$ F+ j7 k: L: f; ^- Z
时钟配置
; P2 B! {1 G( Z4 y2 \
根据板子上的时钟源,进行对应的时钟配置,此处采用内部作为系统PLL的时钟源。

% U/ N( m- c/ V0 k) D7 e8 ]
1.5.png

! h  e: ^9 N+ ]
生成工程

9 k* H! H2 l: H# R
切换到Code Generator选项卡,勾选“Generate perioheral initialization as pair of ‘.c/.h’files perperipheral”选项。

8 i5 o1 n7 f- J- A3 f% g% f
1.6.png
% D+ z) m" B, N' u6 |
调试QSPI驱动

! h. Z/ f& L$ X7 c; t
从开篇提到的GitHub仓库中获取相关的驱动代码。

$ D! }9 j9 M4 S+ T' K. a& z
1.7.png
+ q7 i0 v2 ?  O5 x
第一步
; c, ~; W9 Q# K5 q7 x4 t. O' S
将External-Loaders\ QSPI testing目录mian_test.c中的代码添加到工程中对应的main.c文件中。

; S4 i3 r+ g9 Y+ `
1.8.png
  p9 _% _6 u: {7 y$ W& a  q2 Z
1.9.png
- e& v* `# l* N7 u4 k; r% L& H8 k1 B
1.10.png

% O, C/ k9 r9 O. y- q
1.11.png

: \6 m4 q- B9 w* K: E: N
注意添加代码时保留USER CODE BEGIN x和USER CODE END x标签,否则添加的代码会在Cube MX重新生成代码时被覆盖掉。

/ q1 z) t+ f; P/ ~# i* T/ b+ M
第二步
; I( ]2 D; u% E( F
将\External-Loaders\QSPI Drivers\IS25LP128F目录下的QSPI的HAL驱动文件替换工程中对应的文件。
5 r% [! W' A( [& d) h9 b. S
1.12.png
. u( o/ f# l5 _
第三步

# d6 v- H  N0 e$ ^& e/ W1 @+ \
打开CubeMX,重新生成工程。因为为了适配所有系列的QSPI接口,GitHub所提供QSPI的HAL驱动中,没有提供相应的QSPI外设配置函数,需要通过CubeMX来生成。

& Y% i2 }7 j: d2 Z) U
1.13.png
7 q: K0 D# d+ e  _8 _4 e
第四步

7 I1 e& N3 N0 a5 A) x  \& N
如上图所示由于每个型号的FLASH的控制指令略有差别,所以在此步需要根据自己选用的QPSI FLASH器件进行调整。同时需要进行调试QSPI的读写是否正常。如果QSPIF lash读写不正常,那么在下图中标注的位置添加断点,就可以排查是哪一个环节出错,进一步对驱动进行调整。
! V( t7 Z1 |* E+ v/ f
1.14.png
7 z8 w4 K2 e4 S; Z0 g
修改配置生成QSPI Loader
' f4 v5 R4 [* T1 @# J# H
完成QSPI的驱动调试之后,我们需要添加生成external Loader所需要的代码并修改对应的配置。
1 v$ `' _1 e# Y9 _( c" U4 n
第一步

9 P" i6 f2 L3 q4 ^
添加对应的代码,存放在\External-Loaders\Loader_Files目录下,由于H7和其他的系列的linker file有所区别,所以此处分为H7和others两个文件夹进行存放。我们此处选用H7目录下的问题件。将所有的文件添加到工程中。

) h: Y( j' Y0 D2 B# o" K
1.15.png
. i' @' W4 y2 Q% N: ~0 L) W
1.16.png
! M0 J+ ^3 H; `  e1 R. B! ?% b
第二步

) ?; M' K  K# b. h$ g5 ]
修改Dev_Inf.c中的name为你想设置的名称,一般设置为MCU+Flash名称。

3 t3 e; T2 H! t3 c) S+ ~
1.17.png

/ g; \2 ~; e" `, `4 F( K% {
第三步

. t5 P. Z5 m1 x
修改Linker的配置,通过“project”->“Properties ”打开设置页。将红框内的ld文件修改为linker.ld.(已经在第一步中添加到工程)。
7 k* H! z: I; N
1.18.png
5 b1 j' z2 r. Y7 b1 {8 U
第四步
7 l5 r) V* t) a/ _) i3 b8 ?9 a
修改配置,编译后生成stdlr文件。通过“project”-> “Properties ”打开设置页,在 “postbuild steps”处添加如下指令:

+ s0 B3 l) a) y8 f. h
1.19.png

4 w( d" ]& M- }/ ^/ P' E8 c* a+ K
最后,编译便可在工程目录下生成对应的stdlr文件。将其复制到STM32CubeProgrammer安装目录下的extral loader文件夹下,便可使用。

  a4 z6 `8 M" M' |  _  N
1.20.png
2 r- H2 z) J* Z0 b4 ^4 C
总结
. }3 b9 \5 u/ c6 ?+ P: s6 |
5 B9 ?2 a& v. z0 @
通过该方法可以快速的生成一个外部烧写脚本对外部的QSPI FLASH进行烧录。
( Z; T! @3 I" G
/ o; K  l8 x  c- A2 _
  N; f3 G4 Z0 [) b0 ]
赞 收藏 3 评论0 发布时间:2021-1-7 16:35

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版