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

基于STM32F1(Cortex M3内核)存储器映射经验分享

[复制链接]
攻城狮Melo 发布时间:2023-5-14 17:14
Cortex m3内核规定的存储器映射如下图所示。就好像ARM公司打造了一个柜子,从上到下有这几个抽屉,它规定了每个抽屉放的东西的种类,具体放什么放多少它不管(只要不超过抽屉的大小),由每个芯片厂商自己决定。+ I3 b# J- a1 L: X( x7 g+ S. O& `/ x
1 J* ^5 M& }0 J- }$ m
20170620105420510.png
% }) b) U  o! R
- r7 w/ b. a) K. u9 o& V图1 cortex m3存储器映射2 i3 l: u3 F, R# O- d# k

8 y1 j- A. g: L1 {6 ^我们来看看ST公司打造的STM32F1系列芯片是如何在这些抽屉放置东西的。4 N" m% V$ L' o
- V. _0 x+ E! H5 `; {
代码抽屉
( A( a' I9 o: q/ ]8 i; j& g' _在代码这个抽屉,STM32F1布置了Flash模块,用来存储代码,相当于电脑的硬盘,具体展开如下图所示。主存储器(图中Flash区)起始起止为0x0800 0000,终止地址依Flash大小而定,图中0x0807 FFFF为512k的终止地址。然后经过一段保留区,从0x1FFFF000 – 0x1FFF F7FF为系统存储器,是不可擦除的ROM区,存储ISP程序,最后option bytes这个区域是16个字节,是控制flash区域的寄存器。有同学说我漏了一块,对,从0x0000 0000的这块是我要着重讲解的一块。. `7 Q8 v( Q0 \1 b- v

  Y( I- W4 J% g- g7 h
20170620105707324.png 9 I, v/ G: O# I3 E0 o" A9 T2 s
图2 STM32F1代码区抽屉
' ?! P+ M% R0 g
3 D- W* X+ b) D1 Q8 a0 k- y$ ]& {
在讲这块之前,首先要讲一下STM32F1的三种启动模式,如下图所示。0 E5 C2 {/ K1 F2 [, S5 Y( r
1).主闪存存储器启动:从STM32内置的Flash启动(0x0800 0000-0x0807 FFFF),一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。8 `7 P# i) ^, c  E) Z$ o
) q2 G+ D" k: e- X) i; P* B$ w, S
2).系统存储器启动:从系统存储器启动(0x1FFFF000 – 0x1FFF F7FF),这种模式启动的程序功能是由厂家设置的。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的ISP程序中,提供了串口下载程序的固件,可以通过这个ISP程序将用户程序下载到系统的Flash中。* g; b& j% n5 m1 j! H/ Q7 N

' w6 m* W/ E8 T3 B* L' k
3).片上SRAM启动:从内置SRAM启动(0x2000 0000-0x3FFFFFFF),既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。
/ N' d- w+ l# h
; k! ^; |. C6 W) t9 s
下面讲解Boot MemorySpace(Aliased to Flash or systen memory depending onBOOT pins)。其实这块空间是预留的,不存数据,或者它压根不存在。在不同的启动方式下,这块区域会被映射到其他区域:6 s4 i- z1 t2 T; A6 z6 [; L6 H
* }% {2 B9 u+ d) g! J

- g  a; [5 P; l9 i! {3 \* `1).从Main Flash 启动:Boot Space 是Main Flash 的别名。以0x08000000 对应的内存为例,则该块内存既可以通过0x00000000 操作也可以通过0x08000000 操作,且都是操作的同一块内存. R2 Y( e8 M. v5 @

: ~% p8 u4 W3 p8 @1 H2 f: b
2).从System Memory启动:Boot Space 是System Memory的别名。以0x1FFFFFF0对应的内存为例,则该块内存既可以通过0x00000000 操作也可以通过0x1FFFFFF0操作,且都是操作的同一块内存
2 a. f' i2 g; l% Z1 u
- J0 \, E- p, d7 d( i$ h* x
3).从SRAM 启动:SRAM 只能通过0x20000000进行操作,与上述两者不同。从SRAM 启动时,需要在应用程序初始化代码中重新设置向量表的位置。5 c0 F3 S- b4 q: q7 u

- G' g0 p" [5 Q  S7 H1 _
20170620105726550.png
5 h+ P, d* L7 j0 e" }! q0 F5 V1 G+ `
图3 STM32F1三种启动模式; n/ R& ]0 L: p5 b! N0 w0 G2 S

( h1 P0 Q* ?. G0 J片上SRAM抽屉
( c( T  o' L, K8 g  F) }在SRAM这个抽屉,STM32F1布置了SRAM,相当于电脑的内存,具体展开如下图所示。/ p, c$ t/ o8 U( I2 Q/ u
. z$ x3 B3 K- z/ I' z
20170620105737262.png ( V  N* C8 u7 n' W# d% t/ G, J
1 T# o$ Q9 n' ]$ \
图4 STM32F1片上SRAM抽屉( i8 k: ~7 H3 ?% g! S/ M$ @

) X8 T5 ?# Q5 @* }5 z7 b% ~0 ~在这个抽屉中,STM32F1只放了64K的SRAM存储空间,其余的空间保留(空着)。这里需要说明一下,虽然其余那些空间被保留,没有存储器与之对应,但是位带别名区的地址仍然可以操作来改变64K地址中的对应位。
0 c% @& m& L, c/ }* M! X; `9 u7 n: u4 l: e- I' u" U
片上外设抽屉3 A. {8 c1 X; C. g9 s
在这个抽屉中,放置了STM32F1的外设,包括GPIO、UART、ADC等所有外设的控制、状态、数据寄存器都在这个抽屉中。当然,抽屉很大肯定装不满,装不满的空间就预留着。
9 O  _) d2 g6 f9 c- {- K" K! \
5 ~8 v, M7 X/ {# C; [4 d
20170620105744253.png : o. `5 Y: ?5 f& }: [6 Y4 m  l
8 N  |( Q: u) T9 J  v6 e% A1 D
图5 STM32F1片上外设抽屉
# ~& y3 y- @. Q$ d; z; W6 ?1 n" |7 c
1 @0 P$ ]& k* ^* a
8 R% x/ R+ r' y9 V' M2 H& a! }
片外RAM抽屉" k2 e! [6 K2 Y9 i, c/ v3 P
在这个抽屉中,我们可以自己扩展内存,但必须在STM32的FSMC控制器下进行,这个控制器的作用就是将内部AHB总线和外部扩展内存的总线进行转化,利用这个控制器,我们可以很方便的控制LCD,这里就不展开了。这1G的抽屉可以放下图的东西。这片空间STM32并没有放东西,STM2指定我们可以在其中扩展内存NOR/PSRAM1、NOR/PSRAM2……并接受FSMC控制器的控制。
9 E5 q$ L/ F. @  N$ D
7 X& K3 y2 Q9 O) y1 V4 K% J# }8 B, S
20170620105749754.png 6 s5 \: |9 a* ?# l9 E, c
& T, o/ d% l" L  |+ r% X5 W( s
图6 STM32F1片外RAM抽屉1 s, ?1 e5 |7 F6 B2 k9 j- P" y
7 \) L# F* ~/ s' e9 V# Z7 n
片外外设抽屉
" @. u. x) F6 I, W: r3 ^在这个抽屉中,STM32F1放置了FSMC控制器的一些寄存器,就是在这些寄存器的配合下,FSMC控制器得以有效控制片外RAM进行读写操作。4 i' a, l( x& i2 H$ n

0 A+ k4 U; `+ e4 @9 S& a
20170620105756238.png 1 m) q  N$ g, R' `& D3 y
图7 STM32F1片外外设抽屉
& ~! h1 l# O# I
5 c3 b$ d* Z$ H其余的抽屉,STM32F1就没动过了。最后,stm32f1的存储器完整映射如下图所示,大家可以和图1对比了解这个过程。0 M: M; }, e* z, U' x& {' f  o
6 n0 B# K7 A% ]) g
20170620105927240.png   u" X, N4 b5 d( V; N
图8 STM32F1存储器映射0 H+ _1 l" \4 k2 [4 ?
————————————————% _. r: j# d" ]
版权声明:fantastikman7 k& I1 w- E  F* ~' B
如有侵权请联系删除7 d& b( `5 T& I9 E0 a$ C( I  F% @
" J. b4 k' ]1 m, O0 L
3 C% K; q3 h/ _2 K* v- ^" q
& j9 X( `. e, H$ M* b
赞 收藏 评论0 发布时间:2023-5-14 17:14

举报

0个回答

所属标签

相似技术帖

官网相关资源

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