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

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

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

; x, l9 o7 t8 D# ^6 \2 o+ e
通过 STM32CubeMX
制作外部Flash的烧写驱动 (.stdlr)

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

9 M3 F  X! v4 i1 h# q- s# P. y
准备工作
l  安装STM32CubeIDE
l  安装MCU对应型号的HAL库

1 S1 t% y& q( P1 m$ `/ u
External loader开发

" m7 _- `  |& L6 T' n. m1 ~0 v! x/ T
External Loader的开发分成三个部分,第一部分是使用STM32CubeMX进行工程的配置及生成。第二部分是外部Flash的驱动调试,主要包含初始化,擦除,写入以及读出等操作。第三部分调用驱动函数进行external loader的生成,包括外部Flash信息的定义,包括Flash容量的大小,page的大小,以及Sector相关的信息;第三步中external loader所需要的代码及对应器件的驱动,可以在下面的GitHub仓库中获取,同时也欢迎大家将自己调试好的器件驱动提交到该仓库。

5 p+ F1 Z' }* ~
+ ?1 _2 `! t! M# y$ q' @1 `4 ~2 }
使用STM32CubeMX生成工程

# \, w8 M( |1 K3 R
此处,我们使用STM32CubeIDE集成的STM32CubeMX进行工程的配置和生成。

; u+ }" S2 K9 {1 h) F
新建工程
选择对应的器件,填入工程名称,并选择存放位置:
. b: i9 Q# r) N) G5 q
1.1.png
1.2.png
. t2 w" _5 m3 v0 T  z
管脚配置
1 g; h4 d. f+ n; q
按照硬件原理图选择好对应的Flash管脚,此处选择为Bank2,配置如下图。注意调整管脚的速度为High,同时使能QSPI的中断。FlashSize值设置为N,Flash的大小配置2N+1。

% M& J6 m0 g( A+ ^  Y* f
1.3.png

+ ?6 `$ M) c9 E- H5 e1 T; a
1.4.png
2 ]  P; V. {. D2 r: S
时钟配置
0 R+ [. y4 W4 n) y
根据板子上的时钟源,进行对应的时钟配置,此处采用内部作为系统PLL的时钟源。

0 M) j. r# ^( e9 g% F4 S/ Q) J  l$ a
1.5.png
' E  w* `! p$ O% x0 _) k
生成工程
3 j7 c7 x5 f5 u0 t
切换到Code Generator选项卡,勾选“Generate perioheral initialization as pair of ‘.c/.h’files perperipheral”选项。
% n9 S! C5 T9 w
1.6.png

/ G8 ~3 [% c# h( c6 B
调试QSPI驱动
" Y* R0 J. q) p' \8 o5 h
从开篇提到的GitHub仓库中获取相关的驱动代码。
* J, o" \+ i1 U# m' P
1.7.png

6 V3 ^' s) t" H; |5 ^& e
第一步

, R! z+ h  V2 l' i2 `$ I8 P
将External-Loaders\ QSPI testing目录mian_test.c中的代码添加到工程中对应的main.c文件中。
& L4 h1 \% O- J, Y
1.8.png
/ w& q" o' q# T4 |/ }
1.9.png
6 u, {! Z4 _, d( f
1.10.png
* Q: f, h) p- [
1.11.png
2 R* B( W1 O1 u5 G: [2 C  O' l
注意添加代码时保留USER CODE BEGIN x和USER CODE END x标签,否则添加的代码会在Cube MX重新生成代码时被覆盖掉。

7 D- b% J' d( _5 |' |* s
第二步
- m5 ?+ l$ Q+ U; G) [, `
将\External-Loaders\QSPI Drivers\IS25LP128F目录下的QSPI的HAL驱动文件替换工程中对应的文件。

, Z5 O2 T) r% J! I5 P2 E
1.12.png

7 e* _9 O- p" V' L% o/ i$ }
第三步

& K: _' A4 t3 t$ ^: R
打开CubeMX,重新生成工程。因为为了适配所有系列的QSPI接口,GitHub所提供QSPI的HAL驱动中,没有提供相应的QSPI外设配置函数,需要通过CubeMX来生成。

% z' N1 A2 M, V' c  M, a
1.13.png
8 k, s" |" v& q" J0 e
第四步

( Z) r$ Y8 g+ X0 E0 C
如上图所示由于每个型号的FLASH的控制指令略有差别,所以在此步需要根据自己选用的QPSI FLASH器件进行调整。同时需要进行调试QSPI的读写是否正常。如果QSPIF lash读写不正常,那么在下图中标注的位置添加断点,就可以排查是哪一个环节出错,进一步对驱动进行调整。
0 C7 W! f6 K: O* x, \4 o
1.14.png

: M+ Y1 o3 w( B9 D
修改配置生成QSPI Loader
) S( Z9 h, @* O' ^" l8 p
完成QSPI的驱动调试之后,我们需要添加生成external Loader所需要的代码并修改对应的配置。

- e, F* r- c9 u0 S& G9 g. U+ [
第一步

. R5 E7 l7 X) C  f! d
添加对应的代码,存放在\External-Loaders\Loader_Files目录下,由于H7和其他的系列的linker file有所区别,所以此处分为H7和others两个文件夹进行存放。我们此处选用H7目录下的问题件。将所有的文件添加到工程中。
1 M5 x9 w. `/ R  x+ B/ B. S! [
1.15.png

3 Y4 s0 L5 h$ l' |; u# Z
1.16.png

9 V, n$ V/ |) k  i# c' ?6 N1 q
第二步
5 I7 q; c- I$ D$ J* T
修改Dev_Inf.c中的name为你想设置的名称,一般设置为MCU+Flash名称。

$ j: U' M9 y0 u8 X; f9 @
1.17.png
, E6 R: l( T! D3 A
第三步
! \2 Y- P0 x& D0 w& }& P
修改Linker的配置,通过“project”->“Properties ”打开设置页。将红框内的ld文件修改为linker.ld.(已经在第一步中添加到工程)。

2 y- b, h) q" N" z# V; n9 E  ^6 K0 q
1.18.png
3 U0 l  R6 k/ ~# h
第四步

& e5 m/ O7 A+ n- W3 r
修改配置,编译后生成stdlr文件。通过“project”-> “Properties ”打开设置页,在 “postbuild steps”处添加如下指令:

: h# t2 S& z, T( r2 O
1.19.png
9 s) M# w; o' L
最后,编译便可在工程目录下生成对应的stdlr文件。将其复制到STM32CubeProgrammer安装目录下的extral loader文件夹下,便可使用。

1 {: d1 f# L9 h2 o( I8 ~
1.20.png

+ N1 G/ [! [% U. J7 o6 f
总结

* U4 z2 @7 c2 ]& r0 U, ]* G0 S1 X6 @* o: [! B# M
通过该方法可以快速的生成一个外部烧写脚本对外部的QSPI FLASH进行烧录。
) x! N& R1 i# E- |' N$ \

: b& }' }5 S. C& Y: g+ G: y& `% a2 W3 Q- ~! B9 d$ D
收藏 1 评论0 发布时间:2021-1-7 16:35

举报

0个回答

所属标签

相似分享

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