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

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

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

  g% b2 \3 k+ d0 U" W
通过 STM32CubeMX
制作外部Flash的烧写驱动 (.stdlr)

" M. A1 g, A2 H- u+ c7 I
前言
目前,越来越多的应用需要扩展外部的Flash来满足存储需求。那么,在调试及批量生产的过程中,需要对外扩的Flash进行烧录操作。由于STM32 ST-LINK Utility以及STM32CubeProgrammer中,对Flash支持的型号有限,只能覆盖一部分MCU和Flash的型号,无法完全满足客户的需求。而且,它提供的external loader的制作模板存在覆盖的芯片型号较少,且无法前期QSPIFlash调试的问题。本文旨在提供一种通过stm32CubeMX制作external Flash loader的方法。客户可以根据自己的型号,进行定制化的生成。本文中,以某客户实际使用的MCU(STM32H750) 和Flash(S25LP128F) 为例进行讲解。
. s. {+ @: Q' \
准备工作
l  安装STM32CubeIDE
l  安装MCU对应型号的HAL库
, s3 n% g9 ^1 T# I' F$ x7 ?' _
External loader开发

" C4 i& X" U2 W$ X6 l0 N
External Loader的开发分成三个部分,第一部分是使用STM32CubeMX进行工程的配置及生成。第二部分是外部Flash的驱动调试,主要包含初始化,擦除,写入以及读出等操作。第三部分调用驱动函数进行external loader的生成,包括外部Flash信息的定义,包括Flash容量的大小,page的大小,以及Sector相关的信息;第三步中external loader所需要的代码及对应器件的驱动,可以在下面的GitHub仓库中获取,同时也欢迎大家将自己调试好的器件驱动提交到该仓库。
! Q  b6 @2 e0 a, B3 f

' Q# F# k8 L+ ~- Z
使用STM32CubeMX生成工程

( f( H$ o$ ], R% u
此处,我们使用STM32CubeIDE集成的STM32CubeMX进行工程的配置和生成。

- a0 I9 n6 |7 L; C
新建工程
选择对应的器件,填入工程名称,并选择存放位置:
# s' |5 r2 n6 u% Z. V, n8 N
1.1.png
1.2.png

7 _: _# w, k; y1 p8 q" T
管脚配置
# z+ }- p0 T# E# Z5 r& P) N* D# ^
按照硬件原理图选择好对应的Flash管脚,此处选择为Bank2,配置如下图。注意调整管脚的速度为High,同时使能QSPI的中断。FlashSize值设置为N,Flash的大小配置2N+1。
/ s: K( ?/ q3 D4 X" U, G, _
1.3.png

' X6 k- h# y7 A+ B
1.4.png

  U7 |' q5 [' C5 |2 D2 z  n( w  b5 U
时钟配置
0 h% R, r1 G+ Z1 I
根据板子上的时钟源,进行对应的时钟配置,此处采用内部作为系统PLL的时钟源。
+ C7 d; W6 S2 w& ^
1.5.png
, k, P, P$ [0 |1 W
生成工程
/ `7 j9 p4 y. Y- z! C$ j8 b  R
切换到Code Generator选项卡,勾选“Generate perioheral initialization as pair of ‘.c/.h’files perperipheral”选项。

/ z- T. Y! V5 i
1.6.png
: Z& _: ^. r0 a# x
调试QSPI驱动

& q+ c2 t% a5 I
从开篇提到的GitHub仓库中获取相关的驱动代码。

$ D5 d! F# M9 Z+ L( q
1.7.png
2 M- M. O; ]  U4 N
第一步
1 g! t/ Z: o6 @2 V% D, L/ [6 H+ ^# a
将External-Loaders\ QSPI testing目录mian_test.c中的代码添加到工程中对应的main.c文件中。

, J! }9 T7 Y: b: R* l5 V  N( g- F
1.8.png

& X! N( t) ?$ p% }
1.9.png
: f* d1 g0 ~& x+ M6 |7 t6 `
1.10.png
4 m+ p# ?9 V% {" s: ~
1.11.png

& ~8 R/ N% o: N+ G/ W. Q6 r* ~
注意添加代码时保留USER CODE BEGIN x和USER CODE END x标签,否则添加的代码会在Cube MX重新生成代码时被覆盖掉。

. w3 q( J/ J; G1 j2 m' U
第二步

4 [0 a9 Y, Y* S( Z% H
将\External-Loaders\QSPI Drivers\IS25LP128F目录下的QSPI的HAL驱动文件替换工程中对应的文件。
4 I8 g& z/ L* C+ i; t7 B9 t
1.12.png

6 C% }; i2 C" E1 P, ^7 q: b: C
第三步

, ?0 P  C3 I# H/ D
打开CubeMX,重新生成工程。因为为了适配所有系列的QSPI接口,GitHub所提供QSPI的HAL驱动中,没有提供相应的QSPI外设配置函数,需要通过CubeMX来生成。

% D0 x/ `3 {8 T& u
1.13.png

8 x( Y, g& E* C" T" H; a
第四步
- G, O+ x, [3 y. n: z& ^  U
如上图所示由于每个型号的FLASH的控制指令略有差别,所以在此步需要根据自己选用的QPSI FLASH器件进行调整。同时需要进行调试QSPI的读写是否正常。如果QSPIF lash读写不正常,那么在下图中标注的位置添加断点,就可以排查是哪一个环节出错,进一步对驱动进行调整。

' j  W( l) T5 b' d" z( l
1.14.png

% `: Z6 p8 p9 z" x2 w
修改配置生成QSPI Loader

) I1 z* S  ?- s/ F  `
完成QSPI的驱动调试之后,我们需要添加生成external Loader所需要的代码并修改对应的配置。
( n& T( m* d5 [  u
第一步
7 N, A) D7 ^8 J! s% d7 Q" c
添加对应的代码,存放在\External-Loaders\Loader_Files目录下,由于H7和其他的系列的linker file有所区别,所以此处分为H7和others两个文件夹进行存放。我们此处选用H7目录下的问题件。将所有的文件添加到工程中。

! d* K& A4 e4 z0 ]5 M- N
1.15.png
4 m9 T7 E; h; E9 P) o$ M( h
1.16.png

! |- L9 ?; h. _& U! t0 K
第二步

- @, `9 F$ {" R
修改Dev_Inf.c中的name为你想设置的名称,一般设置为MCU+Flash名称。

0 b( ~" j) f! ~
1.17.png

( x% v% {/ ?& P; r& Y+ ^) z
第三步
. ]1 O$ ?/ F! e3 h
修改Linker的配置,通过“project”->“Properties ”打开设置页。将红框内的ld文件修改为linker.ld.(已经在第一步中添加到工程)。
5 k( \- A5 F+ s
1.18.png
. S7 X* g  B( W( L/ {
第四步
: C; }- A! U1 O- Y& ~
修改配置,编译后生成stdlr文件。通过“project”-> “Properties ”打开设置页,在 “postbuild steps”处添加如下指令:
& d, \! |, ?# x* i
1.19.png
1 W' y9 z* ^6 ?$ T" C) d/ o
最后,编译便可在工程目录下生成对应的stdlr文件。将其复制到STM32CubeProgrammer安装目录下的extral loader文件夹下,便可使用。

3 q2 ~/ C- _. K3 E
1.20.png

' \) i2 m' o! \8 j* R6 m, m$ ?* `
总结

( P5 f' p, @8 f4 e  L& [
5 o8 b0 s- N) \! o
通过该方法可以快速的生成一个外部烧写脚本对外部的QSPI FLASH进行烧录。

0 o0 S) W/ {: }( w) i. y. E) j5 p) t; R+ G

' o/ w1 H7 N. U( ?( j4 \
收藏 1 评论0 发布时间:2021-1-7 16:35

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版