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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-14 17:14
Cortex m3内核规定的存储器映射如下图所示。就好像ARM公司打造了一个柜子,从上到下有这几个抽屉,它规定了每个抽屉放的东西的种类,具体放什么放多少它不管(只要不超过抽屉的大小),由每个芯片厂商自己决定。5 q; h( R( G2 T" ^2 @1 y4 G' \
) @& R0 y+ |% m. R
20170620105420510.png ! D3 [0 j! I0 I6 A; @; _1 @
- U% H; ~$ Y- R# Y5 l. I
图1 cortex m3存储器映射
7 R5 Z/ O9 |: o5 N* g
! @5 a  c6 q- j" ]我们来看看ST公司打造的STM32F1系列芯片是如何在这些抽屉放置东西的。
8 P8 J; J; ^1 c6 l
3 O( N9 |- W' R
代码抽屉
; k( a+ i+ P2 _* Q在代码这个抽屉,STM32F1布置了Flash模块,用来存储代码,相当于电脑的硬盘,具体展开如下图所示。主存储器(图中Flash区)起始起止为0x0800 0000,终止地址依Flash大小而定,图中0x0807 FFFF为512k的终止地址。然后经过一段保留区,从0x1FFFF000 – 0x1FFF F7FF为系统存储器,是不可擦除的ROM区,存储ISP程序,最后option bytes这个区域是16个字节,是控制flash区域的寄存器。有同学说我漏了一块,对,从0x0000 0000的这块是我要着重讲解的一块。$ `, x; A! S% _0 g$ l+ q

1 A7 A6 `8 o! a, d% W/ R
20170620105707324.png
* n" h$ h6 t$ ?  x图2 STM32F1代码区抽屉
: J+ y  R" F+ A! O7 a. k. J6 V" Y7 q' ]8 }
在讲这块之前,首先要讲一下STM32F1的三种启动模式,如下图所示。
" k9 u* D, I: E! F1 P% \4 L$ Q1).主闪存存储器启动:从STM32内置的Flash启动(0x0800 0000-0x0807 FFFF),一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。) B( n& `7 d4 N8 j: I

9 [( x" n# c: {. r/ Y
2).系统存储器启动:从系统存储器启动(0x1FFFF000 – 0x1FFF F7FF),这种模式启动的程序功能是由厂家设置的。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的ISP程序中,提供了串口下载程序的固件,可以通过这个ISP程序将用户程序下载到系统的Flash中。
; A6 a: z# l: G) i- O9 M# [* r% v2 O& Z6 |7 c% ^" i! Q" w+ J7 Y4 q; a
3).片上SRAM启动:从内置SRAM启动(0x2000 0000-0x3FFFFFFF),既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。! N% Q5 ?1 v0 \* ~5 X: b, C( }' l

% {% U- ]/ w5 C3 r
下面讲解Boot MemorySpace(Aliased to Flash or systen memory depending onBOOT pins)。其实这块空间是预留的,不存数据,或者它压根不存在。在不同的启动方式下,这块区域会被映射到其他区域:. D' o# w) t! ], C( r9 Q3 l+ n
8 b; w3 ~- C$ ]  ~$ q

$ ^/ g9 o2 c9 M- J5 U1).从Main Flash 启动:Boot Space 是Main Flash 的别名。以0x08000000 对应的内存为例,则该块内存既可以通过0x00000000 操作也可以通过0x08000000 操作,且都是操作的同一块内存1 f2 m. R" f; }
! n! ^' n! `5 C7 h! W: Q
2).从System Memory启动:Boot Space 是System Memory的别名。以0x1FFFFFF0对应的内存为例,则该块内存既可以通过0x00000000 操作也可以通过0x1FFFFFF0操作,且都是操作的同一块内存2 B" A% b$ A" ~+ T: b8 d
' |/ }( t5 U$ D/ @' j$ `
3).从SRAM 启动:SRAM 只能通过0x20000000进行操作,与上述两者不同。从SRAM 启动时,需要在应用程序初始化代码中重新设置向量表的位置。
, K0 p+ }4 I, t5 I/ r( |# M2 a( O/ B+ y( f+ \/ o
20170620105726550.png * X  w) S5 i$ i$ u6 E! D
2 G4 C7 D5 f) H) ~8 ?% L
图3 STM32F1三种启动模式
1 H" i4 f9 ~+ G  p$ g+ x# }# W
+ E( Y' Q8 w2 D. j5 ?* o0 N" @- k
片上SRAM抽屉7 N& Y! g; a; S  N9 N
在SRAM这个抽屉,STM32F1布置了SRAM,相当于电脑的内存,具体展开如下图所示。4 v( K2 \$ I- M$ M* ?: n

% O- Y0 u- N8 x2 r6 ]7 Q4 A
20170620105737262.png + {# H5 ]6 W' R9 G+ O+ z
. h: E9 X$ O& \$ N
图4 STM32F1片上SRAM抽屉
4 p+ l1 B' B1 q0 S! p# [  `

8 ^5 s/ b/ R* S* Z! o5 \5 @" K- W在这个抽屉中,STM32F1只放了64K的SRAM存储空间,其余的空间保留(空着)。这里需要说明一下,虽然其余那些空间被保留,没有存储器与之对应,但是位带别名区的地址仍然可以操作来改变64K地址中的对应位。
" j- ~2 |' P# o; S
# W, V6 C$ o) I; Y2 A' l6 ?3 z3 p) ^片上外设抽屉  Z7 W. |# O  t+ c) K4 e
在这个抽屉中,放置了STM32F1的外设,包括GPIO、UART、ADC等所有外设的控制、状态、数据寄存器都在这个抽屉中。当然,抽屉很大肯定装不满,装不满的空间就预留着。. Y3 u1 [) U* r1 A2 ^) V
6 J* p; M' a* J
20170620105744253.png
+ s! @  C; E) @7 W, P
* A( {/ |) Y; z0 }4 u图5 STM32F1片上外设抽屉' R/ K( P+ ]! Q( l0 t- o  A
$ B) c3 k. Z, I3 ~7 r$ K. [$ ?+ b

% ?2 ~% s0 _" s5 [9 Q, x片外RAM抽屉  w5 \; J' g+ m  h
在这个抽屉中,我们可以自己扩展内存,但必须在STM32的FSMC控制器下进行,这个控制器的作用就是将内部AHB总线和外部扩展内存的总线进行转化,利用这个控制器,我们可以很方便的控制LCD,这里就不展开了。这1G的抽屉可以放下图的东西。这片空间STM32并没有放东西,STM2指定我们可以在其中扩展内存NOR/PSRAM1、NOR/PSRAM2……并接受FSMC控制器的控制。+ S! d4 a4 @  O' T1 g. t
7 q% j! o# a! u$ {5 z
20170620105749754.png
7 q* j4 ?& P/ K7 q, [% l/ K! l. Q+ h; V( |1 g
图6 STM32F1片外RAM抽屉
1 s& y2 z( W; i: T( m  z: [6 c4 D/ {3 N4 b+ g$ s" e) p
片外外设抽屉
7 @% v9 U0 d$ l. E0 N5 E/ p# w在这个抽屉中,STM32F1放置了FSMC控制器的一些寄存器,就是在这些寄存器的配合下,FSMC控制器得以有效控制片外RAM进行读写操作。
( ]" P" a  X, @3 x1 {) i( ~/ [% R/ ?. Y# H
20170620105756238.png ( ]9 l  \% U2 V& H; g
图7 STM32F1片外外设抽屉+ K1 {1 f) t) v4 {  M4 Z2 p4 @. s9 j

& r" w. H/ S; F0 r" a其余的抽屉,STM32F1就没动过了。最后,stm32f1的存储器完整映射如下图所示,大家可以和图1对比了解这个过程。# C" B. h4 v" l
# `; _; V$ ^; ]( W. ]+ Q1 z5 Q: i
20170620105927240.png 2 a& h% E- A' R$ ?8 W6 w; |
图8 STM32F1存储器映射2 L* i/ e$ L: y" B6 J. |% E
————————————————
- s- i- a  ]3 R6 S2 S/ ^  `版权声明:fantastikman
; \9 f5 I% Q, A3 X  r$ {8 G) M, `如有侵权请联系删除/ N* }' @: L6 c' k6 c9 a! g! @# v$ S
0 g% R* T  Y" D

2 r5 W: K2 v/ v% K+ W2 Z" |/ S3 ~" ~# c8 B' L
收藏 评论0 发布时间:2023-5-14 17:14

举报

0个回答

所属标签

相似分享

官网相关资源

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