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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-14 17:14
Cortex m3内核规定的存储器映射如下图所示。就好像ARM公司打造了一个柜子,从上到下有这几个抽屉,它规定了每个抽屉放的东西的种类,具体放什么放多少它不管(只要不超过抽屉的大小),由每个芯片厂商自己决定。
  O+ _6 z& g( _/ o" z3 y9 x0 d# \4 W% ?& k7 w* N7 W
20170620105420510.png 5 Z4 r) r) q- }# s6 d

8 {$ w( h6 I: x8 S% n6 E6 f图1 cortex m3存储器映射" t! h9 a" w! K4 N: s! n

' J9 [7 ?& \$ G9 c1 j! p, u1 ^" S我们来看看ST公司打造的STM32F1系列芯片是如何在这些抽屉放置东西的。' s2 s, g% L1 R
; E4 T  O8 P& \/ n9 h
代码抽屉( q& y/ p8 F) s/ Z4 T% h& \8 ?9 N/ p
在代码这个抽屉,STM32F1布置了Flash模块,用来存储代码,相当于电脑的硬盘,具体展开如下图所示。主存储器(图中Flash区)起始起止为0x0800 0000,终止地址依Flash大小而定,图中0x0807 FFFF为512k的终止地址。然后经过一段保留区,从0x1FFFF000 – 0x1FFF F7FF为系统存储器,是不可擦除的ROM区,存储ISP程序,最后option bytes这个区域是16个字节,是控制flash区域的寄存器。有同学说我漏了一块,对,从0x0000 0000的这块是我要着重讲解的一块。2 T7 \% j( V/ T; g2 O
$ m  m) r$ k7 M/ c& V9 W1 p. b. H1 r, |9 d
20170620105707324.png 9 S( G& `/ L2 W  H/ R( P( r, k
图2 STM32F1代码区抽屉
2 U' J- ^( S9 w& [. m+ A* Q7 E1 \- S: h; |4 y
在讲这块之前,首先要讲一下STM32F1的三种启动模式,如下图所示。
9 M6 v% o4 u) e: c. [, ?1).主闪存存储器启动:从STM32内置的Flash启动(0x0800 0000-0x0807 FFFF),一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。: V& }  T( _7 A4 f2 T( f; w, W) `

  t  W2 S$ T1 Y, `
2).系统存储器启动:从系统存储器启动(0x1FFFF000 – 0x1FFF F7FF),这种模式启动的程序功能是由厂家设置的。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的ISP程序中,提供了串口下载程序的固件,可以通过这个ISP程序将用户程序下载到系统的Flash中。
2 ~; W& v9 v0 ^# E$ b/ ~& b/ [, a* _6 b8 Y) `
3).片上SRAM启动:从内置SRAM启动(0x2000 0000-0x3FFFFFFF),既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。
1 E1 _' t; {' U  |8 p9 o, L: {4 e* l% X' t
下面讲解Boot MemorySpace(Aliased to Flash or systen memory depending onBOOT pins)。其实这块空间是预留的,不存数据,或者它压根不存在。在不同的启动方式下,这块区域会被映射到其他区域:
2 i$ H0 I/ D  x! i2 Z& `+ h# L2 z5 b9 P9 F: V$ o! }& ]
8 X: Z: w; U) R3 E6 Y! s! l/ W: M
1).从Main Flash 启动:Boot Space 是Main Flash 的别名。以0x08000000 对应的内存为例,则该块内存既可以通过0x00000000 操作也可以通过0x08000000 操作,且都是操作的同一块内存" d1 V' f% J9 _4 T) u5 S

! Y/ |$ c0 f) w
2).从System Memory启动:Boot Space 是System Memory的别名。以0x1FFFFFF0对应的内存为例,则该块内存既可以通过0x00000000 操作也可以通过0x1FFFFFF0操作,且都是操作的同一块内存1 ^* Z' k, r& h8 I/ f' f, W% e: R+ H) Q( p
/ }6 x. m2 b: {. `3 t" v# \+ L
3).从SRAM 启动:SRAM 只能通过0x20000000进行操作,与上述两者不同。从SRAM 启动时,需要在应用程序初始化代码中重新设置向量表的位置。8 A2 g, H7 T0 x) ^3 V! f

, q; k7 X$ N  Y9 f
20170620105726550.png
- ]6 O. `- q+ Z7 j; X# d' X- [  G6 Y% k+ U$ g
图3 STM32F1三种启动模式
+ K, }) y. c& ?

& A' t7 Z+ L3 M  N5 x+ {( a片上SRAM抽屉* ^5 C: F" R$ M2 V) ?% a
在SRAM这个抽屉,STM32F1布置了SRAM,相当于电脑的内存,具体展开如下图所示。
( N# t/ Y1 L0 j2 {. d! {( i
! e6 d/ g4 l* A% f
20170620105737262.png : d: \( m" }9 R  S
- `' B! @& Z; |/ Q+ s
图4 STM32F1片上SRAM抽屉
: d9 z2 j* a2 [3 a8 t
2 V. y1 i  s5 R* H; q& U
在这个抽屉中,STM32F1只放了64K的SRAM存储空间,其余的空间保留(空着)。这里需要说明一下,虽然其余那些空间被保留,没有存储器与之对应,但是位带别名区的地址仍然可以操作来改变64K地址中的对应位。
3 A( B7 [: X8 o* y# }9 S* `* R
4 q8 H- u' u7 u' _1 S/ K片上外设抽屉0 i9 p( `7 |  ^
在这个抽屉中,放置了STM32F1的外设,包括GPIO、UART、ADC等所有外设的控制、状态、数据寄存器都在这个抽屉中。当然,抽屉很大肯定装不满,装不满的空间就预留着。- n3 b. z6 r1 g

, O$ N; T6 ]% x* t+ s
20170620105744253.png
) C0 }4 m0 p  V& \/ E2 }3 C
# b8 P8 v6 [. `" w/ B图5 STM32F1片上外设抽屉
. E% M& ]. @! \, b: N8 r9 J* k1 k+ P+ J

9 O6 H4 X: k6 u- M5 n& _片外RAM抽屉+ e+ c1 Y) j) r, _  U2 }! _
在这个抽屉中,我们可以自己扩展内存,但必须在STM32的FSMC控制器下进行,这个控制器的作用就是将内部AHB总线和外部扩展内存的总线进行转化,利用这个控制器,我们可以很方便的控制LCD,这里就不展开了。这1G的抽屉可以放下图的东西。这片空间STM32并没有放东西,STM2指定我们可以在其中扩展内存NOR/PSRAM1、NOR/PSRAM2……并接受FSMC控制器的控制。5 p  g  x' g) a; y' B6 b6 q

& _1 A+ K8 d1 T" t& ?+ I* r- y3 f+ q
20170620105749754.png
+ I# ?; R2 D6 e9 j+ u$ k
0 s) @6 b% x8 b* q& Z$ o4 X) q图6 STM32F1片外RAM抽屉
6 K% u, m# f: L. o% r# x* F* D
片外外设抽屉8 a2 I2 h, O: R% p0 ^0 o
在这个抽屉中,STM32F1放置了FSMC控制器的一些寄存器,就是在这些寄存器的配合下,FSMC控制器得以有效控制片外RAM进行读写操作。
+ i: O9 e- P; M' ~: _
; c' X1 u+ W/ z9 V
20170620105756238.png
* ?& C$ _" W$ w# ]' e# _! z图7 STM32F1片外外设抽屉  q! R5 i# V8 b- `5 }

1 j4 z% v  ]. `5 G6 u& ~& }6 u其余的抽屉,STM32F1就没动过了。最后,stm32f1的存储器完整映射如下图所示,大家可以和图1对比了解这个过程。# r9 E" J* M0 b3 p3 A5 d0 |
/ J0 ~+ o3 r7 U8 p$ O& r' s+ }& E
20170620105927240.png $ Q( Z9 w1 A; F/ X
图8 STM32F1存储器映射, Y* ^7 i' O* d# i
————————————————
, L. [& j7 `4 a版权声明:fantastikman
- a, v& y$ Q1 F" Q$ i" c5 t1 C如有侵权请联系删除
0 I: J2 e( Y' U5 `! \: ~1 d' X( Y$ y- ?$ M7 E) f- H

  ~' [- K: B1 R$ E/ V& y/ D
2 U1 `. n3 K8 r$ L' K
收藏 评论0 发布时间:2023-5-14 17:14

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版