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

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

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

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

2 j1 f( B9 a4 L/ p( I  O
准备工作
l  安装STM32CubeIDE
l  安装MCU对应型号的HAL库

& w/ [1 s) R: o( `( r: l
External loader开发
, b+ ?5 z. R$ I
External Loader的开发分成三个部分,第一部分是使用STM32CubeMX进行工程的配置及生成。第二部分是外部Flash的驱动调试,主要包含初始化,擦除,写入以及读出等操作。第三部分调用驱动函数进行external loader的生成,包括外部Flash信息的定义,包括Flash容量的大小,page的大小,以及Sector相关的信息;第三步中external loader所需要的代码及对应器件的驱动,可以在下面的GitHub仓库中获取,同时也欢迎大家将自己调试好的器件驱动提交到该仓库。

; q8 [& U/ O1 V3 ]" V. x* v- Q' n# ~9 m
使用STM32CubeMX生成工程

. V+ f. m4 `2 b& C- ?
此处,我们使用STM32CubeIDE集成的STM32CubeMX进行工程的配置和生成。
5 M: |) z( q/ `. c
新建工程
选择对应的器件,填入工程名称,并选择存放位置:
& F" z8 @6 t( q! r' }+ U8 }7 z
1.1.png
1.2.png
4 x) D+ l6 u2 e0 s1 l# x
管脚配置

9 F! ~3 J, }6 Z
按照硬件原理图选择好对应的Flash管脚,此处选择为Bank2,配置如下图。注意调整管脚的速度为High,同时使能QSPI的中断。FlashSize值设置为N,Flash的大小配置2N+1。
- L7 x! I9 K  v  Q+ r% D
1.3.png
/ @5 y* J; I0 L  i. ~5 m8 W( c: Z' [# R
1.4.png
7 l* q; v2 k' E- J
时钟配置

7 z/ S/ t! _9 ?1 I7 [
根据板子上的时钟源,进行对应的时钟配置,此处采用内部作为系统PLL的时钟源。

$ Y6 l# ]" Z$ l' n+ u  c
1.5.png

5 H7 i- H2 }6 R% F2 l/ L) b
生成工程
' ]$ @) h& m6 E3 V' g
切换到Code Generator选项卡,勾选“Generate perioheral initialization as pair of ‘.c/.h’files perperipheral”选项。
- `9 _, j+ t5 e! ^3 \& g: p& J7 {
1.6.png

! a+ U: |) Z) ~1 c; U3 A
调试QSPI驱动

1 |2 D- z' T. E1 ^
从开篇提到的GitHub仓库中获取相关的驱动代码。
1 d' I' c& M- f- x% v( V3 R5 w
1.7.png

3 i. z, w6 o; m% }3 ~( U
第一步
& e) q; r6 n$ L+ Y
将External-Loaders\ QSPI testing目录mian_test.c中的代码添加到工程中对应的main.c文件中。
. r6 i: u" B/ s5 [" S. L% v
1.8.png

# `1 q& `, T5 V+ W4 E2 D' d
1.9.png
! A  r% q% F$ a* Y& I* E
1.10.png

: m# S2 A" T) x4 q' L) p. `6 C3 A" J
1.11.png

3 E5 [1 u7 F) I' F
注意添加代码时保留USER CODE BEGIN x和USER CODE END x标签,否则添加的代码会在Cube MX重新生成代码时被覆盖掉。

/ Z- Y0 S/ w3 M1 g$ J; v0 u8 X4 P
第二步
9 S) C3 z8 r  m+ Q( y( z5 i
将\External-Loaders\QSPI Drivers\IS25LP128F目录下的QSPI的HAL驱动文件替换工程中对应的文件。
6 M! {+ L0 T6 S; ^- |4 S
1.12.png
! `; H# U" S/ |) g
第三步

! ]! D' D! X1 t4 ^7 j5 G
打开CubeMX,重新生成工程。因为为了适配所有系列的QSPI接口,GitHub所提供QSPI的HAL驱动中,没有提供相应的QSPI外设配置函数,需要通过CubeMX来生成。

  f& P  H$ `$ W+ S) p8 x- q! @, ~
1.13.png

& Y% H: g, @: X( a0 U- L
第四步
# v2 V  q* u3 {4 @! y2 S0 [" e
如上图所示由于每个型号的FLASH的控制指令略有差别,所以在此步需要根据自己选用的QPSI FLASH器件进行调整。同时需要进行调试QSPI的读写是否正常。如果QSPIF lash读写不正常,那么在下图中标注的位置添加断点,就可以排查是哪一个环节出错,进一步对驱动进行调整。
7 e' A2 }3 c+ ~# z# h5 M/ b
1.14.png

+ u. ~9 q0 {8 y, V
修改配置生成QSPI Loader

5 f3 U  W& g* T  M  A
完成QSPI的驱动调试之后,我们需要添加生成external Loader所需要的代码并修改对应的配置。
+ [1 O, l/ `. M6 W, w  L* u2 R
第一步

6 I) y* v: d3 `
添加对应的代码,存放在\External-Loaders\Loader_Files目录下,由于H7和其他的系列的linker file有所区别,所以此处分为H7和others两个文件夹进行存放。我们此处选用H7目录下的问题件。将所有的文件添加到工程中。
4 A6 H7 q9 Y7 u/ W8 W3 m
1.15.png

( f5 {* C. z/ \: U
1.16.png
: X9 L& Q2 B# |% O# w3 [; t! I4 m
第二步
2 d. i+ O" M# g3 l1 l; I
修改Dev_Inf.c中的name为你想设置的名称,一般设置为MCU+Flash名称。
% l1 E. L( g/ v- [1 z0 B
1.17.png
- @3 j5 q% E5 T1 a: s4 h7 U) k% r
第三步
9 j* J% r% \0 q8 H
修改Linker的配置,通过“project”->“Properties ”打开设置页。将红框内的ld文件修改为linker.ld.(已经在第一步中添加到工程)。

+ J& R8 t- k9 }
1.18.png
* B" s8 |) j  W6 @2 u6 _, y
第四步

. w- H! _- [5 ]# H  |2 o
修改配置,编译后生成stdlr文件。通过“project”-> “Properties ”打开设置页,在 “postbuild steps”处添加如下指令:

$ F( n4 r" }7 W6 T. ], ^# @
1.19.png

- n$ L% b; l/ i" H* ]. e- U7 v
最后,编译便可在工程目录下生成对应的stdlr文件。将其复制到STM32CubeProgrammer安装目录下的extral loader文件夹下,便可使用。

$ ?0 l& r, P1 {- ]' b) Z$ K
1.20.png
1 S4 i, b, \! I( P- m
总结

# ^) s6 }- o: K6 _
3 k3 j' {$ h/ B: v. x( g* H2 I6 z
通过该方法可以快速的生成一个外部烧写脚本对外部的QSPI FLASH进行烧录。
% r/ W$ Y# v9 C4 M7 k

( k/ s& F( n4 u. x0 S* j1 N$ J" l4 l& O+ t! U) T
收藏 3 评论0 发布时间:2021-1-7 16:35

举报

0个回答

所属标签

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