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

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

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

, f4 C6 |! a4 z0 ^) t- T8 j: ]
通过 STM32CubeMX
制作外部Flash的烧写驱动 (.stdlr)
4 A9 c: S# k: M" Q6 z  v  {) Z
前言
目前,越来越多的应用需要扩展外部的Flash来满足存储需求。那么,在调试及批量生产的过程中,需要对外扩的Flash进行烧录操作。由于STM32 ST-LINK Utility以及STM32CubeProgrammer中,对Flash支持的型号有限,只能覆盖一部分MCU和Flash的型号,无法完全满足客户的需求。而且,它提供的external loader的制作模板存在覆盖的芯片型号较少,且无法前期QSPIFlash调试的问题。本文旨在提供一种通过stm32CubeMX制作external Flash loader的方法。客户可以根据自己的型号,进行定制化的生成。本文中,以某客户实际使用的MCU(STM32H750) 和Flash(S25LP128F) 为例进行讲解。

! b1 z  u$ T  e7 C1 M& l9 I) Q8 G3 r
准备工作
l  安装STM32CubeIDE
l  安装MCU对应型号的HAL库
/ Z- `: D& \- j  y0 D& F
External loader开发
4 {, B3 J1 Q8 j
External Loader的开发分成三个部分,第一部分是使用STM32CubeMX进行工程的配置及生成。第二部分是外部Flash的驱动调试,主要包含初始化,擦除,写入以及读出等操作。第三部分调用驱动函数进行external loader的生成,包括外部Flash信息的定义,包括Flash容量的大小,page的大小,以及Sector相关的信息;第三步中external loader所需要的代码及对应器件的驱动,可以在下面的GitHub仓库中获取,同时也欢迎大家将自己调试好的器件驱动提交到该仓库。
' p% s9 ^' o9 |: Y4 ^) d

7 X0 i- E+ ]) L  L+ K% J5 v
使用STM32CubeMX生成工程
0 q  f  d" a( H; Q. W* o/ L
此处,我们使用STM32CubeIDE集成的STM32CubeMX进行工程的配置和生成。
3 d! {: T( T, E; I/ B2 M
新建工程
选择对应的器件,填入工程名称,并选择存放位置:

8 r3 u* d/ n7 @) p' B0 f* }
1.1.png
1.2.png

1 o4 i9 z5 t! e' g
管脚配置
+ m8 d/ G, K9 ~1 [: F
按照硬件原理图选择好对应的Flash管脚,此处选择为Bank2,配置如下图。注意调整管脚的速度为High,同时使能QSPI的中断。FlashSize值设置为N,Flash的大小配置2N+1。
# I3 }- ]2 G, _- v7 P% K4 h/ k" T' B
1.3.png
8 i$ d5 L/ {& F& O
1.4.png
) t6 S  G$ }; ?' V1 w2 Y
时钟配置
& ?" f* |1 w" Y  {2 V1 |$ Q
根据板子上的时钟源,进行对应的时钟配置,此处采用内部作为系统PLL的时钟源。

2 N! u7 i3 H; T! g, E  ~
1.5.png

9 K  |" w" [6 x6 L2 L5 Y
生成工程

) D  |& u7 }$ \5 f6 i) s
切换到Code Generator选项卡,勾选“Generate perioheral initialization as pair of ‘.c/.h’files perperipheral”选项。
8 n( v; x# g) W) M& e
1.6.png

$ R/ E  b3 x$ c; [% O: d
调试QSPI驱动

& ]9 O+ [. I! o1 Q: k( x
从开篇提到的GitHub仓库中获取相关的驱动代码。

6 K0 g4 O6 A' H5 `
1.7.png
1 p2 Z' [8 A# r0 j" F
第一步
2 D# {  r2 ^5 x
将External-Loaders\ QSPI testing目录mian_test.c中的代码添加到工程中对应的main.c文件中。

6 D3 `! M" G& P2 `& m) o3 `
1.8.png
( S' P/ g- a6 ?. G8 G& B1 \3 w
1.9.png
$ T& j  Y0 l9 [5 q' |
1.10.png
' v6 J5 p# ~4 w. {2 z9 ~
1.11.png
8 U' I- w( z. i3 j* }" B1 [4 y: e- a5 S
注意添加代码时保留USER CODE BEGIN x和USER CODE END x标签,否则添加的代码会在Cube MX重新生成代码时被覆盖掉。
  T' W: H! G  r/ b% `/ P$ c. g
第二步

# W% {4 r; {- M3 o0 k, X
将\External-Loaders\QSPI Drivers\IS25LP128F目录下的QSPI的HAL驱动文件替换工程中对应的文件。
$ Y" t; e7 e# k* m3 L9 b) G
1.12.png
4 i* G; ~+ c. c, f5 {
第三步
5 Y1 Z9 i$ g3 E
打开CubeMX,重新生成工程。因为为了适配所有系列的QSPI接口,GitHub所提供QSPI的HAL驱动中,没有提供相应的QSPI外设配置函数,需要通过CubeMX来生成。
* p6 H5 V% Z1 N3 M' z, F4 h& @
1.13.png
6 f! J* m2 l( i  I
第四步
! V- F/ W4 M) _! P8 c  V/ c  v( w0 \- l
如上图所示由于每个型号的FLASH的控制指令略有差别,所以在此步需要根据自己选用的QPSI FLASH器件进行调整。同时需要进行调试QSPI的读写是否正常。如果QSPIF lash读写不正常,那么在下图中标注的位置添加断点,就可以排查是哪一个环节出错,进一步对驱动进行调整。
. V7 s% E% i8 o8 y; x: _' R: O
1.14.png
/ m" }% ?+ H. k
修改配置生成QSPI Loader
6 T" f4 A5 \, j. D+ e
完成QSPI的驱动调试之后,我们需要添加生成external Loader所需要的代码并修改对应的配置。

" b' X3 A6 |- g' J  ?, a( Q
第一步
2 e9 M1 L* J( L+ F  e, X
添加对应的代码,存放在\External-Loaders\Loader_Files目录下,由于H7和其他的系列的linker file有所区别,所以此处分为H7和others两个文件夹进行存放。我们此处选用H7目录下的问题件。将所有的文件添加到工程中。

  b& h- V% E, |/ {  ]! l" I
1.15.png

' _1 {7 ^9 {2 ^) T
1.16.png

; s: ~# V6 `/ i0 d; D
第二步

% S2 Y% @7 a3 v7 T
修改Dev_Inf.c中的name为你想设置的名称,一般设置为MCU+Flash名称。

9 {$ `' N' f) C% U- U6 `% @1 ^
1.17.png
. H% c1 j. V  z2 [) K% S3 h* r
第三步
2 F. _2 L; L  n# c( z/ O7 {
修改Linker的配置,通过“project”->“Properties ”打开设置页。将红框内的ld文件修改为linker.ld.(已经在第一步中添加到工程)。

+ S& X( V" I9 W# a8 {
1.18.png

: k# P& z; y- P/ h
第四步

: i' ^, W  D  A
修改配置,编译后生成stdlr文件。通过“project”-> “Properties ”打开设置页,在 “postbuild steps”处添加如下指令:
) U  ]* z; w. x5 j6 n! p
1.19.png
: u, U  l1 D5 C. z5 f
最后,编译便可在工程目录下生成对应的stdlr文件。将其复制到STM32CubeProgrammer安装目录下的extral loader文件夹下,便可使用。
1 l& \% R5 Q- K$ h; ]" Q/ ?
1.20.png
& A: G) O. @/ |/ E3 n' E, `5 r7 ]
总结
. C9 C3 n4 q' I; D% |

4 I$ k& {7 t* d" r* i8 i
通过该方法可以快速的生成一个外部烧写脚本对外部的QSPI FLASH进行烧录。
, {2 S+ Q: q/ l

6 T; I- M$ G# g5 j& P/ `- O# |. Z! R& ~  T, p# @  {2 n; L
收藏 3 评论0 发布时间:2021-1-7 16:35

举报

0个回答

所属标签

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