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

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

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

/ ~! W# W3 X- g6 [: j
通过 STM32CubeMX
制作外部Flash的烧写驱动 (.stdlr)

% q7 V! ~! H. Z7 P/ w( A
前言
目前,越来越多的应用需要扩展外部的Flash来满足存储需求。那么,在调试及批量生产的过程中,需要对外扩的Flash进行烧录操作。由于STM32 ST-LINK Utility以及STM32CubeProgrammer中,对Flash支持的型号有限,只能覆盖一部分MCU和Flash的型号,无法完全满足客户的需求。而且,它提供的external loader的制作模板存在覆盖的芯片型号较少,且无法前期QSPIFlash调试的问题。本文旨在提供一种通过stm32CubeMX制作external Flash loader的方法。客户可以根据自己的型号,进行定制化的生成。本文中,以某客户实际使用的MCU(STM32H750) 和Flash(S25LP128F) 为例进行讲解。
' c, d5 o' q& Z  }' w* B, R# k
准备工作
l  安装STM32CubeIDE
l  安装MCU对应型号的HAL库

3 F" B7 e1 J7 l1 @$ i3 l& I
External loader开发
( D! o' k. v0 p! U9 C( @2 d2 K1 _
External Loader的开发分成三个部分,第一部分是使用STM32CubeMX进行工程的配置及生成。第二部分是外部Flash的驱动调试,主要包含初始化,擦除,写入以及读出等操作。第三部分调用驱动函数进行external loader的生成,包括外部Flash信息的定义,包括Flash容量的大小,page的大小,以及Sector相关的信息;第三步中external loader所需要的代码及对应器件的驱动,可以在下面的GitHub仓库中获取,同时也欢迎大家将自己调试好的器件驱动提交到该仓库。
, Y6 Q, z! ?- W. u, k4 B
. z) W3 O: R+ f
使用STM32CubeMX生成工程

# k* d+ Y/ P' }! L0 z+ M
此处,我们使用STM32CubeIDE集成的STM32CubeMX进行工程的配置和生成。

# U7 U! q2 W) e0 |/ ~( t
新建工程
选择对应的器件,填入工程名称,并选择存放位置:
$ O' K2 [1 H" h6 ?9 w+ F
1.1.png
1.2.png

0 \' \- Q/ s1 h
管脚配置
% J" X1 v$ @; P  m4 y; I) x
按照硬件原理图选择好对应的Flash管脚,此处选择为Bank2,配置如下图。注意调整管脚的速度为High,同时使能QSPI的中断。FlashSize值设置为N,Flash的大小配置2N+1。

, m4 z+ w6 K7 l% o( v; T
1.3.png
, s  N6 I/ d; j0 ]& O% Z  |
1.4.png

2 q% ?1 ]& w% i  K* C+ g
时钟配置
: v" D: Q( e5 v* g
根据板子上的时钟源,进行对应的时钟配置,此处采用内部作为系统PLL的时钟源。
% u5 R  F3 W9 y/ B1 N' U
1.5.png
* ]& E& ^: I) `0 W
生成工程

% e' \( ^( B/ Q; ^9 s
切换到Code Generator选项卡,勾选“Generate perioheral initialization as pair of ‘.c/.h’files perperipheral”选项。

* Y8 `' F0 w  Q4 S+ @1 Y- N
1.6.png
2 W7 z3 F5 I) H
调试QSPI驱动
$ o4 ^9 [8 }& \3 n
从开篇提到的GitHub仓库中获取相关的驱动代码。
" @" U  m; ^3 _/ b8 Z$ r6 n8 f
1.7.png

; N; T0 U! M; k+ g9 i5 {0 t# K  C
第一步
5 n* I- h0 p, z. X1 K
将External-Loaders\ QSPI testing目录mian_test.c中的代码添加到工程中对应的main.c文件中。

; F6 y7 D) M( g: R
1.8.png
- z& n  w" H* a! {
1.9.png

1 S5 T( o. e; k- g  \9 r
1.10.png

8 W* C( Q! l3 c
1.11.png

, D$ D: J- }; G. j' P3 D: I1 q
注意添加代码时保留USER CODE BEGIN x和USER CODE END x标签,否则添加的代码会在Cube MX重新生成代码时被覆盖掉。
4 A' t7 ~$ c  K! X' \  O7 S
第二步
* b6 l. y" v/ b2 k' F
将\External-Loaders\QSPI Drivers\IS25LP128F目录下的QSPI的HAL驱动文件替换工程中对应的文件。

% h* t4 ]+ R: M2 h# e/ }* G
1.12.png
, O7 f* c& M/ Q8 o7 T6 O: L6 J
第三步

; @3 X5 p4 ~$ _# C" K; v! ]
打开CubeMX,重新生成工程。因为为了适配所有系列的QSPI接口,GitHub所提供QSPI的HAL驱动中,没有提供相应的QSPI外设配置函数,需要通过CubeMX来生成。

% R$ D( w6 R% W( @/ J
1.13.png
% {; I2 @; r8 i
第四步
* z: @4 s" A" z
如上图所示由于每个型号的FLASH的控制指令略有差别,所以在此步需要根据自己选用的QPSI FLASH器件进行调整。同时需要进行调试QSPI的读写是否正常。如果QSPIF lash读写不正常,那么在下图中标注的位置添加断点,就可以排查是哪一个环节出错,进一步对驱动进行调整。

6 ~4 Y: s; f; c5 z
1.14.png
: k0 i# G9 r( r: R# X
修改配置生成QSPI Loader

) D9 f( P8 h  Q1 [9 ]' B* F
完成QSPI的驱动调试之后,我们需要添加生成external Loader所需要的代码并修改对应的配置。
9 B, v0 W$ P' J( X( y4 Z0 W9 l
第一步
! W0 E! R- ~6 G
添加对应的代码,存放在\External-Loaders\Loader_Files目录下,由于H7和其他的系列的linker file有所区别,所以此处分为H7和others两个文件夹进行存放。我们此处选用H7目录下的问题件。将所有的文件添加到工程中。

" X9 [+ C  c4 }- I( W0 W
1.15.png

7 O1 W6 b& Q9 h# ]* k  q
1.16.png
" p3 G8 y, ?6 v% D; w
第二步
0 k. _( U, P- s) L' M, f
修改Dev_Inf.c中的name为你想设置的名称,一般设置为MCU+Flash名称。
1 [8 m& c. F( c
1.17.png

: R8 q2 _" f( _0 H2 P4 P- E
第三步

! X. x3 `6 o& C' ?" g
修改Linker的配置,通过“project”->“Properties ”打开设置页。将红框内的ld文件修改为linker.ld.(已经在第一步中添加到工程)。
3 K9 A6 V4 e, }) V$ v! {; U
1.18.png
  M1 d0 W. ^  R) V- u
第四步
3 R  q! |* v! K2 K0 T
修改配置,编译后生成stdlr文件。通过“project”-> “Properties ”打开设置页,在 “postbuild steps”处添加如下指令:

$ \. I1 U& l7 l& h
1.19.png
5 \( a5 K; ^! e# i/ {
最后,编译便可在工程目录下生成对应的stdlr文件。将其复制到STM32CubeProgrammer安装目录下的extral loader文件夹下,便可使用。
2 i6 o, ]3 ~; K( @4 J. n5 E
1.20.png
  V% M" T8 _; q) K. |/ ]
总结
: }: i! [0 p0 \8 G! ]4 E9 {

! S8 p* `$ G2 ?0 K% z8 R- K
通过该方法可以快速的生成一个外部烧写脚本对外部的QSPI FLASH进行烧录。
0 e- j# N9 F  E) w$ T

7 r- n* V: D) {
4 o7 ^$ x% e4 c& A) P8 f
赞 收藏 3 评论0 发布时间:2021-1-7 16:35

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版