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

【经验分享】STM32H7代码运行在外置flash的部分总结

[复制链接]
STMCU小助手 发布时间:2021-12-28 23:00
场景* k2 V* l# u( @7 i2 b- H" v+ t
项目中需要用到STM32H750这款ARM cortex-M7内核的单片机,它作为H743的阉割版,它的内置flash只剩下128K。但是对于我们需要有IAP升级的项目来说,这128K(一个扇区)完全不够用,所以需要外置QSPI Flash。但是使用外置QSPI Flash又引入了新的问题。# L( a' G; u8 f$ b  _  E/ I! Z  A
# ^1 c7 ]/ S  O
问题一:需要自己写分散加载文件
: a$ b2 p' I1 y9 ]7 s$ v2 G  e& c4 y8 _
首先介绍一下什么是分散加载文件:我们的代码在编译以后,需要由编译器链接到指定内存地址上,平时我们在STM32内置的flash上可以直接使用keil生成的分散加载文件就可以,但是keil并不知道我们外置的flash,所以需要我们自己来完成这部分工作。
8 F/ F* n1 e  M9 [4 g9 U
( r# q' H8 l( U( o% D/ B7 ekeil中的配置如下图所示:
6 L0 S& e9 [2 `. y  T4 c9 u/ j
8 e! R; @" x  m2 t# ]/ {
20210601102703723.png

  v, u3 r/ c% H3 X7 w
' @+ z0 `- a$ ]9 H0 E0 f分散加载文件如下图所示(了解了ro、rw、zi代表了什么,就可以自己定义下面的各个地址空间):6 m. F% t& U- C( ^& x% h% n; g+ Y
: Q$ @$ d$ E% X! w2 Y# M3 H6 |
20210601102901962.png

# N, i8 e- y, J: @) y  C: ]  p* {  ^% `9 L" O, ?, F
: o6 s; H5 l5 O! w1 @
问题二:运行在STM32片内flash速度比QSPI Flash要快多少
5 c' k. L! `) [1 b" e8 \8 f! T0 Z
运行速度的差异是很重要的,不能因为外置flash就让我的高性能芯片效率变低,所以我测试了两种代码运行方式的运行速度进行对比,如下图:
) j! g( b8 y. g/ `+ c& z3 ~1 F# B! e
20210601102922170.png

: q: P9 S" V) r0 F+ o# z2 U+ ~& _2 k) z' Q
​ 左图为QSPI Flash的运行时间,右图为片内flash的运行时间,由此我们可以看出,两种运行方式的速度差距不大。4 U. r  F7 v  C) U: O# W3 g8 ]; O

7 r; o% R% _" {, K+ ]/ t. X既然一种是外置的一种是内置的,而且外置的QSPI 芯片时钟频率最高才100多M,为什么速度差距不大呢?
5 h6 j6 f6 g/ R3 ]. c
% O% M* ~1 D4 U/ B我的分析是:因为我们使用的是H750芯片,这款芯片带了一个一级缓存,由于这个缓存的存在,让两者的速度差距不是那么大。
) [! l; j) V& A# p- m4 v问题三:MDK对应的下载算法怎么写?
4 u: h3 U* i. L$ A首先我们来说一下什么是下载算法:我们在配置keil工程时,会在魔法棒里面的debug选项处选择我们的下载方式(一般为jlink),然后再setting里面我们会选择flash download来add一个选项,这个选项就是下载算法。如下图中②所示,那些选项就是我们要的下载算法。( L) f* g' R& ~* [
8 ~% ^* T  z5 y& X$ Z/ b. i
2021060110302059.png

; a, x' |& B) e( W2 s0 A) v$ I9 J* d  e% k, ~. D& n7 T" d' T' {
下载算法的本质:下载算法其实就是一段加载到sram里面运行的STM32程序,这段程序的作用就是和keil通信,接收keil发过来的数据,然后把它写到对应的flash中。上图①所示就是这段程序的加载地址以及它的大小。因为每款芯片的外设不一样,外挂的flash型号不一样,所以没有一款算法可以兼容所有的芯片,我们得学会根据自己的硬件环境来写对应的下载算法。
, M( U# u7 F7 R6 `' E
" I1 T  D1 {* R- M" A如何写下载算法:
& j! S0 M: Q1 w% ?) c8 m5 ?- z; e9 D( y8 n
首先我们找到我们的keil安装目录下(比如D\keil5\ARM\Flash\ _Template),这是keil官方给的一个模板工程,我们按照这个模板工程把需要的驱动加入其中。; l( ]" Y& d$ s

- Z" j, B  c  J+ k& O, g如下图所示,我们自己添加一个HARDWARE文件夹,把需要用到的驱动放入工程中。上面三个文件是标准接口文件,不能动。
* k0 t1 p5 R9 C4 W; v
% J' [+ j7 F  D. a1 V# K4 y
20210601103107860.png

) l8 Z" ]' q" J+ I! i
9 N. N; {* ^  i模板工程FlashPrg.c文件接口函数如下图所示,我们只需要在他们给定的函数接口中实现自己的逻辑即可。
2 P8 ?8 w) L( F* x' i% F. X. k
7 a0 T. c- u% i& M) W
20210601103205494.png

. V) O5 p$ y4 u8 n1 A# C
! P( U* i& d6 [& m: }8 c) j0 a4 G. s  f模板工程FlashDev.c文件接口函数如下图所示,它是给keil进行识别的文件,对照进行修改就行。$ ]9 C! ]! m. b  H

5 j7 g% i2 ^* q* g, }
20210601103234589.png

, }/ i+ |& L! ?4 N" d4 U1 L' D. _5 ]* N. G
在全部修改完成后,进行编译,会在根目录下生成一个.FLM的文件,这个就是我们上面所选的下载算法,我们把它复制到D\keil5\ARM\Flash目录下,然后我们就可以在keil中选择到我们自己写的下载算法了,如下图所示:& k& _8 m- e+ h3 i+ i- a
- ?) d7 Z5 o0 Q! I
20210601103307396.png
! j% V$ A6 R- K

. k8 V) X% F3 ~# i5 B$ o+ I, P
9 {) o8 S5 `$ {6 l8 I  T
收藏 评论0 发布时间:2021-12-28 23:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版