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

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

[复制链接]
STMCU小助手 发布时间:2021-1-7 16:35
工程师笔记 | 通过 STM32CubeMX制作外部Flash的烧写驱动 (.stdlr)
+ G8 Y- U1 H/ o  l" A9 S/ N7 y3 T
通过 STM32CubeMX
制作外部Flash的烧写驱动 (.stdlr)
* B7 a5 Y" K( O  Q) ?' Z
前言
目前,越来越多的应用需要扩展外部的Flash来满足存储需求。那么,在调试及批量生产的过程中,需要对外扩的Flash进行烧录操作。由于STM32 ST-LINK Utility以及STM32CubeProgrammer中,对Flash支持的型号有限,只能覆盖一部分MCU和Flash的型号,无法完全满足客户的需求。而且,它提供的external loader的制作模板存在覆盖的芯片型号较少,且无法前期QSPIFlash调试的问题。本文旨在提供一种通过stm32CubeMX制作external Flash loader的方法。客户可以根据自己的型号,进行定制化的生成。本文中,以某客户实际使用的MCU(STM32H750) 和Flash(S25LP128F) 为例进行讲解。

0 j. M/ u" K9 i7 G( u
准备工作
l  安装STM32CubeIDE
l  安装MCU对应型号的HAL库

- z+ g0 F4 Y4 p4 M/ O- m
External loader开发

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

+ k) {) k3 U8 X% o: ?% s
; K* Z( e% q: W. z9 h
使用STM32CubeMX生成工程
0 ^0 B0 V7 t6 O4 @
此处,我们使用STM32CubeIDE集成的STM32CubeMX进行工程的配置和生成。

* ?% g/ B. U% g
新建工程
选择对应的器件,填入工程名称,并选择存放位置:
; _: j) }3 N# D6 ^1 _* ]
1.1.png
1.2.png
1 h3 Z, t% C4 R% z# p0 Y' Z2 D
管脚配置
! b5 A) D; v: ]' V) w. O
按照硬件原理图选择好对应的Flash管脚,此处选择为Bank2,配置如下图。注意调整管脚的速度为High,同时使能QSPI的中断。FlashSize值设置为N,Flash的大小配置2N+1。

$ _$ D6 D! m. h% {
1.3.png

/ X. V- {4 f/ q0 O) W: u, {* N: @
1.4.png

. f& }  w9 N, [
时钟配置

2 `4 |1 L/ q) W7 n; z5 I/ d7 }8 ?* ]4 e
根据板子上的时钟源,进行对应的时钟配置,此处采用内部作为系统PLL的时钟源。

0 B; U7 x9 ?4 T( T+ a2 B
1.5.png
, l; K) Q  ?  h" @/ {
生成工程
: z( [+ w$ N& w& J! t
切换到Code Generator选项卡,勾选“Generate perioheral initialization as pair of ‘.c/.h’files perperipheral”选项。

% ]/ C9 a9 \' I8 M( i. ?
1.6.png
" R" l+ K' L2 e& `9 C/ Z
调试QSPI驱动

+ P8 P/ t! q) k( m* T6 K4 m
从开篇提到的GitHub仓库中获取相关的驱动代码。

. `, L) f7 r5 m% U  `- [# T
1.7.png
" h  S# I" I7 l: h
第一步

9 a" m: g7 [. f. T# y: i
将External-Loaders\ QSPI testing目录mian_test.c中的代码添加到工程中对应的main.c文件中。
6 A+ V, x: f, C: |& h
1.8.png

8 ]0 s1 f) `* A% [* t
1.9.png
3 ?6 t4 t6 X% s$ Q
1.10.png
5 ^4 o; f, S" i: V
1.11.png
' U& `) h- q/ g! J( q! \
注意添加代码时保留USER CODE BEGIN x和USER CODE END x标签,否则添加的代码会在Cube MX重新生成代码时被覆盖掉。

/ V% s+ Q! m/ m& z& W- t
第二步
7 M: [8 F6 t, `  b. N
将\External-Loaders\QSPI Drivers\IS25LP128F目录下的QSPI的HAL驱动文件替换工程中对应的文件。

7 Z) K& Q" R, Q% `. ?+ T4 s- a
1.12.png
4 m  t& [. C. l/ Y& D0 P9 G
第三步

) t/ G  c, p/ W, M6 @: \6 j0 ~
打开CubeMX,重新生成工程。因为为了适配所有系列的QSPI接口,GitHub所提供QSPI的HAL驱动中,没有提供相应的QSPI外设配置函数,需要通过CubeMX来生成。

! P* P! J6 t  P7 v& k  f
1.13.png
0 h! b: [( a( Z/ z) D
第四步
7 A4 {, k# I/ q: a! V
如上图所示由于每个型号的FLASH的控制指令略有差别,所以在此步需要根据自己选用的QPSI FLASH器件进行调整。同时需要进行调试QSPI的读写是否正常。如果QSPIF lash读写不正常,那么在下图中标注的位置添加断点,就可以排查是哪一个环节出错,进一步对驱动进行调整。

" B5 p8 f: ]4 F
1.14.png

( R6 `4 _" i+ s) A% j
修改配置生成QSPI Loader
* C3 C) F0 R! D6 k2 R9 C3 B
完成QSPI的驱动调试之后,我们需要添加生成external Loader所需要的代码并修改对应的配置。

$ `8 F6 Y& q: e5 M
第一步

0 O; [1 \4 ]. k% v3 G" P" N
添加对应的代码,存放在\External-Loaders\Loader_Files目录下,由于H7和其他的系列的linker file有所区别,所以此处分为H7和others两个文件夹进行存放。我们此处选用H7目录下的问题件。将所有的文件添加到工程中。

* R4 K* c% q, o) |/ x0 J: G. N
1.15.png

$ Z+ c9 c1 n+ r
1.16.png
( |; p/ U2 c( w: d- \$ j
第二步

3 [7 @+ Q2 K7 a" ^/ i
修改Dev_Inf.c中的name为你想设置的名称,一般设置为MCU+Flash名称。
7 p( G+ s; ~+ B3 q
1.17.png
5 `! X! F! |6 w9 H) ~8 f& ]5 s- O
第三步

7 o. _  o) F" |+ b. q3 {* m: l0 i
修改Linker的配置,通过“project”->“Properties ”打开设置页。将红框内的ld文件修改为linker.ld.(已经在第一步中添加到工程)。

" Z# Y  \" F: @+ g; F! `
1.18.png
( f5 t6 Q0 ?* h9 s: T2 b$ _
第四步

2 d3 t. t* S$ h  K
修改配置,编译后生成stdlr文件。通过“project”-> “Properties ”打开设置页,在 “postbuild steps”处添加如下指令:

" k9 j! b: Q2 i0 s: }# |) x* g
1.19.png

' O. y1 [. K+ j* q) g
最后,编译便可在工程目录下生成对应的stdlr文件。将其复制到STM32CubeProgrammer安装目录下的extral loader文件夹下,便可使用。

5 J+ c+ h! A$ M% y  x) ?7 h
1.20.png

+ {2 L7 n. W  L4 X6 z% b: N) D
总结
$ e, g6 t5 u8 ]+ j6 s, d0 x$ \% c' W) b

- F9 a7 b( ^+ u' j5 A9 D
通过该方法可以快速的生成一个外部烧写脚本对外部的QSPI FLASH进行烧录。
' `5 V8 W( l& H- g& N( v! t# a

5 _* |+ Q5 ~$ ~  J6 S. d4 {  l, N8 a9 a2 b6 e4 g: Q4 C
收藏 3 评论0 发布时间:2021-1-7 16:35

举报

0个回答

所属标签

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