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

Keil中烧写 STM32F750内部 Flash方法

[复制链接]
fightingboon 发布时间:2020-1-15 14:52
前言
5 T" y9 C9 j9 G+ P
STM32F750和STM32F730在STM32F7系列中具有极高的性价比。因为他们内部的Flash只有64KB,经常需要扩展QSPI Flash,所以在STM32CubeF7库中大部分都是提供使用外部QSPI Flash的例程,导致有些用户不清楚如何在ARM Keil中对其内部Flash进行烧写。

: T, X5 @9 S9 c3 _3 V* ^; A' s/ |7 n
问题
& C6 {. l' A. `. S: l, X: O4 [- g. _
某客户在其产品的设计中,使用了STM32F750Z8T6。客户的代码只需要使用内部Flash,但不知如何对其进行烧写。
, t/ U; ^: X  g% k' H" Z
调研

$ {% H& J$ X6 K$ m0 E
1. 了解问题

# D( e& }. q9 e
客户对STM32的了解就是内部Flash的地址就是从0x08000000开始,对于STM32F750,大小为64KB,也就是内部Flash地址为0x08000000~0x0800FFFF。所以客户在其Keil工程项目配置中,在Target页面配置好IROM如下:

$ h" x1 x4 S0 v! F9 }5 G% ]
11.jpg

8 x2 x. B8 F6 X. i. R' {
然后,客户在工程项目配置的Utility页面,点击Setting按钮,选择Flash Download页面,选择Add按钮,增加了内部Flash的编程算法,如下:

6 j6 G7 S' c. Q9 ]" f; |6 f5 ^9 x
22.jpg

) }3 n" M' Q& [* k" v( G" s
点击OK后,回到项目中,进行代码编译,编译成功后进行代码下载,遇到如下错误:
! e! f- C  L2 y7 o* Q! W; w& O! o
33.jpg
7 J" N6 Y( g. j9 U1 W0 R
客户说在编程算法的添加项,只有STM32F75x 64 TCM Flash添加,但是其地址是从0x00200000开始的,觉得很奇怪,没有从0x08000000地址开始的编程算法可选。怀疑是这里的问题。
' A2 N; V$ \( p' t2 V# R
2. 分析问题
5 J$ l6 g) f! o6 s0 g& p/ a
打开STM32F7的Cube库,看了一下STM32F750的例程,使用Keil打开,确实发现如客户所说的内部Flash编程算法只有STM32F75x 64 TCM Flash可添加。

1 f3 Y) D6 w5 a# d
手头上刚好没有STM32F750的板子,所以使用STM32F746ZG的Nucleo板进行验证。从\STM32Cube_FW_F7_V1.14.0\Projects\STM32F746ZG-Nucleo\Examples\GPIO\GPIO_IOToggle\MDK-ARM打开Keil项目,打开项目配置,如下:
+ r" Y3 ~6 j  L  M" ~
44.jpg
55.jpg

' y1 f1 B- J  r
& P' a% \6 A# w1 b$ @7 j9 g
可以看出,STM32F746是有提供STM32F7x1MB Flash的编程算法的,此算法的地址范围为0x08000000-0x080FFFFF,这个编程算法刚才在STM32F750是没有看到的。在默认的项目配置中IROM1配置的地址是0x08000000,不修改项目配置,直接进行编译下载,可以下载成功。

) @: |# L8 \" f' }! S8 z6 o* A
至此,修改一下编程算法试试,将STM32F7x 1MB Flash的编程算法移除,只留下STM32F7xx 1MB Flash (TCM)算法,如下:
5 M) z# |; d* z$ J0 G* W
66.jpg
! l) J0 W& U) u; W/ T2 N
再进行编译下载,就遇到了客户所遇到的问题,错误如下:

7 {3 W8 w$ R) V
77.jpg

5 B( ]* e$ ?! u
所以,其实问题就是出现在项目的IROM配置与下载算法不匹配。根据项目的配置,其编译出来的代码地址是从0x08000000开始的,但是编程算法的地址范围并不是这个地址范围。先来看一下STM32F7的总线矩阵:
% ?% g0 a0 V7 Y# ]4 ]( J( j
88.jpg
3 G$ _% J% y9 o1 t
内部Flash连接到Cortex-M7内核有两条通道,经过ART加速器从ITCM连接,或者从64位AHB总线经过AXI to multi-AHB桥再经过AXIM总线连接。再来看一下Flash Memory的描述:
# i! a; l$ D/ {$ E0 X% I# G2 a
99.jpg

0 q9 `! `% ^; @0 p* ~4 s8 K5 `2 r
可以看到,使用不同的接口,其块基地址是不同的。使用AXIM接口,地址从0x08000000开始;使用ITCM接口,地址从0x00200000开始。所以我们在项目配置中需要加以注意,如果不匹配就会导致编程问题。
0 c  j4 G  n8 p: l
3.问题解决

0 C) B/ _8 h* n
既然在Keil中STM32F750没有基于AXIM总线的编程算法可选,那么可以考虑将项目中的IROM地址修改为正确的地址。以STM32F746来进行验证,在刚才的下载失败中,对项目配置再做一次修改,将IROM1的起始地址从0x08000000修改为0x00200000,如下:
9 c  ?$ T+ q0 t
10.jpg

6 u2 n: w8 j! J9 @
点击OK,然后再重新编译下载,就发现可以成功进行下载了。同理,STM32F750也可以通过这样的修改来进行下载及调试,只不过需要注意的是IROM的Size不一样,需要把Size的值修改为0x10000,因为只有64KB。
3 |8 U# f2 L3 G3 N9 |4 M! X
结论
" E6 v& S; v0 S$ o# I+ I. A- T
在Keil中STM32F750无法进行烧写是因为客户的项目配置IROM起始地址为0x08000000,但是Keil没有提供基于AXIM接口的编程算法,只提供了基于ITCM的编程算法,导致不匹配而出错。
: o8 r1 J( e  e& a
处理

9 r6 q8 c: ]' d
在项目配置中将IROM的起始地址修改为基于ITCM接口的地址0x00200000即可。

" v* I3 F5 U9 }( C0 o: ?1 v$ v3 c/ T/ ?/ O
赞 收藏 评论0 发布时间:2020-1-15 14:52

举报

0个回答

所属标签

相似技术帖

官网相关资源

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