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

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

[复制链接]
STMCU小助手 发布时间:2021-1-7 16:35
工程师笔记 | 通过 STM32CubeMX制作外部Flash的烧写驱动 (.stdlr)
9 K% b$ t% W' `; `% O: [
通过 STM32CubeMX
制作外部Flash的烧写驱动 (.stdlr)

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

. V. x3 `5 g# k( P6 N: ?. W& p3 V
准备工作
l  安装STM32CubeIDE
l  安装MCU对应型号的HAL库
: t' P  T+ {6 |  p' n
External loader开发

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

7 K# n7 [) g9 C  O+ A
$ I6 z- W2 e# ?: _, F5 W% P- Y
使用STM32CubeMX生成工程
: J' Q& I: ]- F8 {
此处,我们使用STM32CubeIDE集成的STM32CubeMX进行工程的配置和生成。

; _6 e- _' U+ \* y8 K( w" S4 V
新建工程
选择对应的器件,填入工程名称,并选择存放位置:
0 k  A- T. ~" S
1.1.png
1.2.png

, z3 n9 U2 Z: Y& D, N
管脚配置
  l  g8 o! _/ i
按照硬件原理图选择好对应的Flash管脚,此处选择为Bank2,配置如下图。注意调整管脚的速度为High,同时使能QSPI的中断。FlashSize值设置为N,Flash的大小配置2N+1。

$ v" w* i; ~2 i; M% o
1.3.png
* U% v0 Z! j! G+ ]
1.4.png
' ^  x$ X) I5 G8 [
时钟配置
1 n- ^7 t) L" }+ s8 D
根据板子上的时钟源,进行对应的时钟配置,此处采用内部作为系统PLL的时钟源。

0 \/ \; B5 ~5 _1 `$ N
1.5.png
! a- ?2 {6 d8 n( I! G; P0 Q# \8 ~
生成工程
8 O1 o* M' r/ h3 g; g4 ?( V
切换到Code Generator选项卡,勾选“Generate perioheral initialization as pair of ‘.c/.h’files perperipheral”选项。

. h5 g7 R7 \8 P  t3 t# [' A3 p
1.6.png
" |% |' M" t; Q# D5 D$ z; g
调试QSPI驱动
( ^/ G6 ]5 i" r; ^* T9 ~) a. [% H
从开篇提到的GitHub仓库中获取相关的驱动代码。

# }  T. z% l* Z. Y* B3 h4 F
1.7.png

7 i( S' M* ]2 P$ T$ M2 ?
第一步
, I& i- h% `2 ^! o- Q
将External-Loaders\ QSPI testing目录mian_test.c中的代码添加到工程中对应的main.c文件中。
2 A3 C8 m" [0 e: V! v; X
1.8.png

  J1 J, R: u& x- O2 ^& ~
1.9.png
- g, Q& u* m  p% a# A' k
1.10.png
& \. C* L9 p8 E' C
1.11.png

5 J. k& Z3 U+ A- a9 ^9 X5 Y' c
注意添加代码时保留USER CODE BEGIN x和USER CODE END x标签,否则添加的代码会在Cube MX重新生成代码时被覆盖掉。
$ b1 O& J$ I6 h) u& @
第二步

' e  Y% |9 j4 U! P& u% h
将\External-Loaders\QSPI Drivers\IS25LP128F目录下的QSPI的HAL驱动文件替换工程中对应的文件。

2 M$ L$ e" w" y6 B( w
1.12.png
! d# ?; U& _: _' y! C
第三步

+ A  O8 _$ Y. C
打开CubeMX,重新生成工程。因为为了适配所有系列的QSPI接口,GitHub所提供QSPI的HAL驱动中,没有提供相应的QSPI外设配置函数,需要通过CubeMX来生成。

" _: L: r1 E1 r* u" C6 \
1.13.png

" y+ U# K6 |, i6 V' f7 h
第四步
% g0 P' U9 {5 N  d) f/ |. R  |
如上图所示由于每个型号的FLASH的控制指令略有差别,所以在此步需要根据自己选用的QPSI FLASH器件进行调整。同时需要进行调试QSPI的读写是否正常。如果QSPIF lash读写不正常,那么在下图中标注的位置添加断点,就可以排查是哪一个环节出错,进一步对驱动进行调整。
5 w& P  R0 Q' w2 Z" E
1.14.png

3 B8 v, ^& p3 G# @. W9 w* o+ W% r
修改配置生成QSPI Loader
1 D4 ~6 f" {: y% e
完成QSPI的驱动调试之后,我们需要添加生成external Loader所需要的代码并修改对应的配置。

' b9 u2 [% u$ \1 j% e2 v
第一步

/ H: n: C7 T3 F2 s
添加对应的代码,存放在\External-Loaders\Loader_Files目录下,由于H7和其他的系列的linker file有所区别,所以此处分为H7和others两个文件夹进行存放。我们此处选用H7目录下的问题件。将所有的文件添加到工程中。

) n( g' K6 i5 y3 [+ T: o9 p8 [
1.15.png
# m7 o# c$ X  O6 E
1.16.png
, U9 `2 q# \6 c& v) J
第二步

. V$ U, u4 R$ W" B% v: J& T9 y( Y
修改Dev_Inf.c中的name为你想设置的名称,一般设置为MCU+Flash名称。

( c. h% o* W6 v3 g* U- ]; C
1.17.png
# d2 B( w' H0 F: Z, W: L
第三步

7 f0 M) H- Z* z' U
修改Linker的配置,通过“project”->“Properties ”打开设置页。将红框内的ld文件修改为linker.ld.(已经在第一步中添加到工程)。
4 N. q$ r  L3 I: t* R3 l
1.18.png
! C0 F$ ?% D2 C& f/ B0 a- i
第四步

4 F% u% t+ Y' A! r( u7 S8 T' W
修改配置,编译后生成stdlr文件。通过“project”-> “Properties ”打开设置页,在 “postbuild steps”处添加如下指令:
4 }4 c1 D' j2 C, e0 p( w+ \
1.19.png

7 f  R6 t' z; J6 Y6 Y4 H) |
最后,编译便可在工程目录下生成对应的stdlr文件。将其复制到STM32CubeProgrammer安装目录下的extral loader文件夹下,便可使用。

  \, ^/ r2 Z) j* E
1.20.png

. E) C, v0 @# }  R( y) n
总结

# _  ^) }# _. d6 M
; U: j9 o: J! A, O
通过该方法可以快速的生成一个外部烧写脚本对外部的QSPI FLASH进行烧录。
: [5 x# l9 _' K; j2 l3 `; s% y: a

  ^- A, B; D6 `
! x7 v2 A$ ~. ^' h4 N
收藏 3 评论0 发布时间:2021-1-7 16:35

举报

0个回答

所属标签

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