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

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

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

, ]& \  f8 B" i& R
通过 STM32CubeMX
制作外部Flash的烧写驱动 (.stdlr)

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

0 S/ g! {8 b+ \" j* ?, F4 }" |
准备工作
l  安装STM32CubeIDE
l  安装MCU对应型号的HAL库

: j6 Z% r. L8 j& L
External loader开发

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

# S6 D0 S4 K4 u  \3 o( ]9 P) B5 g
使用STM32CubeMX生成工程
' a3 w0 F5 I) X, i: f3 s7 p
此处,我们使用STM32CubeIDE集成的STM32CubeMX进行工程的配置和生成。

' @% z- W& s4 P- f+ k1 Y9 u' a
新建工程
选择对应的器件,填入工程名称,并选择存放位置:
6 n# A& `. q+ P% ^
1.1.png
1.2.png

6 r  d1 f8 [# n3 G* r
管脚配置

: D% n/ n9 _# l1 ~& X
按照硬件原理图选择好对应的Flash管脚,此处选择为Bank2,配置如下图。注意调整管脚的速度为High,同时使能QSPI的中断。FlashSize值设置为N,Flash的大小配置2N+1。

1 m2 P3 Z( s( \% m% Z; P% ~" D% c
1.3.png

, z9 e5 t" L0 V9 [3 i3 H
1.4.png

; S- k- D; A9 R1 M3 R
时钟配置
1 }; Y- h, ^7 ]- X
根据板子上的时钟源,进行对应的时钟配置,此处采用内部作为系统PLL的时钟源。
9 Z, i7 W- @$ t
1.5.png
* Z. B8 W2 X; O! n& h" q
生成工程

" G; A# F; ?- m2 H, \
切换到Code Generator选项卡,勾选“Generate perioheral initialization as pair of ‘.c/.h’files perperipheral”选项。

: p3 e# d) `0 u% U9 z" W# U& G
1.6.png

1 p# d+ R% h; X( U2 d7 ^1 e# J' U/ u/ g
调试QSPI驱动

/ _* p  F: U/ ?5 D$ ~1 r
从开篇提到的GitHub仓库中获取相关的驱动代码。
' b& Z3 k# Q) j5 ^$ ?
1.7.png

' [! ^; o; X4 @" M
第一步

- e% c1 y2 W# \( w
将External-Loaders\ QSPI testing目录mian_test.c中的代码添加到工程中对应的main.c文件中。
* {% \' c7 J5 b7 H# Y" u1 [9 O
1.8.png

; g, @0 u+ E0 s8 o% ]" M
1.9.png
  \* U  a4 g! P0 T0 B
1.10.png
& e. q7 \) e% }+ M2 z7 a
1.11.png

0 r+ j" L  F; \' c+ y' z$ c3 o- \
注意添加代码时保留USER CODE BEGIN x和USER CODE END x标签,否则添加的代码会在Cube MX重新生成代码时被覆盖掉。
2 m. I3 j$ d1 t; l, y. u
第二步

$ c! p, l# r7 R4 u1 P
将\External-Loaders\QSPI Drivers\IS25LP128F目录下的QSPI的HAL驱动文件替换工程中对应的文件。
; s( ~( m( G2 Q" z0 F
1.12.png

7 ]; \) M4 B; H; j5 L5 J
第三步
% w" W  ]6 Y+ z- J: k3 H
打开CubeMX,重新生成工程。因为为了适配所有系列的QSPI接口,GitHub所提供QSPI的HAL驱动中,没有提供相应的QSPI外设配置函数,需要通过CubeMX来生成。
- m* x$ K6 U& }7 `! R
1.13.png
0 |1 p! U& r# @" H& a; _8 P
第四步

; V+ c' Q, r/ D* H! O, ~
如上图所示由于每个型号的FLASH的控制指令略有差别,所以在此步需要根据自己选用的QPSI FLASH器件进行调整。同时需要进行调试QSPI的读写是否正常。如果QSPIF lash读写不正常,那么在下图中标注的位置添加断点,就可以排查是哪一个环节出错,进一步对驱动进行调整。

  o3 ?* O% }5 k# n9 O
1.14.png

3 Y8 B6 V# G+ e
修改配置生成QSPI Loader

5 I0 r5 R0 C. \; Z/ X
完成QSPI的驱动调试之后,我们需要添加生成external Loader所需要的代码并修改对应的配置。

3 P# H1 h  k2 F% q
第一步
9 E2 B2 t$ x( E& j" w' p
添加对应的代码,存放在\External-Loaders\Loader_Files目录下,由于H7和其他的系列的linker file有所区别,所以此处分为H7和others两个文件夹进行存放。我们此处选用H7目录下的问题件。将所有的文件添加到工程中。

& @5 z' F4 h0 y- r' i0 l
1.15.png
+ e! Q& T# N7 M0 i
1.16.png

( K- F" A8 Q+ p0 z/ {
第二步
9 ~3 V; O$ |: r& P& n
修改Dev_Inf.c中的name为你想设置的名称,一般设置为MCU+Flash名称。
4 w9 C' i" h" D9 S0 O
1.17.png

- f6 T7 E% y, X; G) O
第三步
- A: w5 V6 W& R! n+ g& I% O
修改Linker的配置,通过“project”->“Properties ”打开设置页。将红框内的ld文件修改为linker.ld.(已经在第一步中添加到工程)。

2 W' r' y1 h5 Q' _- r
1.18.png
# B) A+ p7 a1 `
第四步

/ K: y. ?8 s' p9 V+ J
修改配置,编译后生成stdlr文件。通过“project”-> “Properties ”打开设置页,在 “postbuild steps”处添加如下指令:

' O& @/ T) X8 ^0 ^1 e$ R6 v
1.19.png
: T% t/ p: h, n
最后,编译便可在工程目录下生成对应的stdlr文件。将其复制到STM32CubeProgrammer安装目录下的extral loader文件夹下,便可使用。

) b1 w( r) H. Z, [6 Z
1.20.png
" p4 v) x* n3 S% M  K
总结
9 t+ J5 w& |# ~& F9 L' e" ^# @& U) z
4 W  }' B( C# l# r
通过该方法可以快速的生成一个外部烧写脚本对外部的QSPI FLASH进行烧录。
" H. Q$ Z$ L# w: I2 L7 }8 O; B

+ W; K- t: `# D7 c$ z/ j
. F, W" u5 v9 y/ ?6 Q3 O
收藏 3 评论0 发布时间:2021-1-7 16:35

举报

0个回答

所属标签

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