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

STM32的存储结构

[复制链接]
guoyuli 发布时间:2023-9-6 15:50
存储器是单片机结构的重要组成部分,存储器是用来存储编译好的程序代码和数据的,有了存储器单片机系统才具有记忆功能。按照存储介质的特性,可以分“易失性存储器”和“非易失性存储器”两类。易失性存储器断电后,里面存储的内容会丢失;非易失性存储器断电后,数据可以依然保持。5 U# k- s5 X/ d  T* N1 L/ p/ f. @
* P5 ]3 c- K. i, S  o
capture_20230906154039036.jpg 5 v0 C- [" H; d( w+ H% q

; C( W* G. d: ?( {1 bCM3/CM4的存储结构
6 [( e8 ^: v* `1 h2 q' }2 O9 Z7 g
$ I  q3 _- s7 O: l* j3 |7 E8 z1 V capture_20230906154100056.jpg
( r# U0 `* X( D, M9 d( l! @9 t3 Z1 H8 e" q; _# X! ^- g6 T/ U5 E$ Y  o$ R
STM32是在CM3或CM4内核的基础上进行设计,故要了解STM32的存储器的结构必须先了解COM3/CM4内核的结构(COM3和COM4存储结构划分是一样的)。Cortex-M3的地址空间有4G,分成8个块:代码、SRAM、外部RAM、外部设备、专用外设总线-内部、专用外设总线-外部、特定厂商,每块大小为512MByte(0.5GB),但它只是对这4G空间作出了预先的定义,并指出各块该分给哪些设备,具体的实现又芯片厂商决定,4G存储器开始地址为0x00000000,结束地址为0xFFFFFFFF,地址的位数是32位,那么2^32=4294967296。由于一个基本的存储单元是8bits即1Byte,因此4294967296/1024=4194304KB,4194304/1024=4096MB,4096/1024=4GB。- h. x! M( A4 S, ~
capture_20230906154127377.jpg
+ F! `* @! s* w7 l& a( S! x3 a代码块:地址为0x00000000至0x1FFFFFF的区域是存放代码的,STM32采用的是NandFlash具体是多因为是基于CM3内核的理论最大是512MB,现实STM32F103RB为例flash 128KB。
$ Q& b& G7 j( ~/ a3 j; d片上SRAM:地址0x2000000至0x3FFFFFF的区域,用于让芯片制造商连接片上的SRAM,STM32F103RB为例RAM 20KB,它主要用来存储程序中用到的变量。凡是整个程序中,所用到的需要被改写的量(包括全局变量、局部变量、堆栈段等),都存储在RAM中。4 I0 U* I5 {4 [/ P1 B6 Q% l
& I) G" f( Y7 s- J8 w2 L

) ^1 p/ q; b" }( N片上外设:地址为0x4000000至0x5fffffff,片上外设的寄存器即映射到这个区域。# ~' ^* i! S  W+ ]1 {/ y, |! \
片外RAM和片上外设2个1GB的范围,起始地址分别为0x60000000和0xA0000000,分别用于连接外部RAM和外部设备,它们之中没有位段。
: U- i& b$ B: y7 P5 ]; d最后0.5GB系统组件和内外部私有外设总线地带,地址从0xE000000开始。NVIC、SysTic、代码调试控制所用的寄存器等即位于改区域。# l2 x0 F4 c$ M( ^" V! N
7 N5 G" A3 U" [0 S5 r4 j
STM32存储器结构图3 f* `* _2 p( M% s! O: F

# ]) o" K) g; P' Q0 ?* J2 t5 pCM3/CM4搭好存储器框架后,ST公司再在其上实现具体的存储器。ST公司实现的主要是Flash(CM3的代码区)和SRAM这2个区域。; A8 L& d; q( W+ X! g  w
. p) M+ h9 g( n  y9 d- B$ G  |/ n
% O( b: d5 t* |" I0 o2 k
% x0 E! ^3 L3 i, d3 S, y
片内Flash,它是由  一次性编程区OTP、主存、系统存储器、选项字节等组成。系统存储区是系统保留区,叫做bootloader(ISP Bootloader程序),通过运行此段区域里的程序,可以对主存储区进行重新烧录。
0 D- Z; W3 z) J5 m5 X% v片内SRAM,不同类型的STM32单片机的SRAM大小是不一样的,但是他们的起始地址都是0x20000000,终止地址都是0x2000 0000+其固定的容量大小。SRAM的作用是用来存取各种动态的输入输出数据、中间计算结果以及与外部存储器交换的数据和暂存数据。设备断电后,SRAM中存储的数据就会丢失。$ [0 K. ^2 u& m# P! {$ x7 o  c
1 ]9 x) `6 d: p
STM32存储代码实例分析
/ B; `3 Y: A* W* B9 w* M capture_20230906154137277.jpg
4 o0 F1 n! F3 A! {* O capture_20230906154146592.jpg $ l3 v- P- Y5 G7 }: Z
1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。
1 \& Y8 X+ u- R8 a( y9 F
" y' v, p6 L+ J  W# g4 D6 }' p# s% z) s2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS释放。8 `& [0 P5 N- k3 h4 ]! Z; e& t6 _6 W
# N8 D. f# N/ b) Q3 R
3、全局变量、静态变量:初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和和未初始化的静态变量在相邻的的另一块区域。程序结束后由系统自动释放。
0 x, h6 X! v6 o# q8 @3 T3 f% w5 S% {2 w
4、文字常量:常量字符串就是放在这里的。这些数据是只读的,分配在RO-data(只读数据存储区),则被包含在flash中,程序结束后由系统自动释放: f7 g  }( V' V  q
5 }" k8 _' B# m) G( ?0 W
5、程序代码(code):存放函数体的二进制代码。
, x8 F7 n! b" }$ H& r6 w$ s8 H- j: U# n: L) `
Code为程序代码部分 = 程序代码区(code)
% Q: K2 u1 Q+ H* a3 u2 o' e
7 ?, e! L0 y& S- uRO-data 表示 程序定义的常量 = 文字常量区- n! i' ~0 k! K+ M' ^) j
, i$ R# V3 G* b: s% H" m% L
RW-data 表示 已初始化的全局变量 = 栈区(stack)堆区(heap)全局区(静态区)(static)
' m9 [/ G, E4 h8 P- z# \) |5 a) {. M: Z) i& H
ZI-data 表示 未初始化的全局变量+ E8 X& w4 l8 A3 y3 h
capture_20230906154154275.jpg ( Z( q! L7 _8 {. J/ x, G5 s

) ]0 {- x( E7 O& h$ N' q/ o2 F( P5 O' n
% u& u; b# T& r$ S+ v. K(来源CSDN:
! r' i8 @" m1 ]# CTree-gg https://blog.csdn.net/Yuanghxb/article/details/127523910)
0 a4 W5 z9 U- r& Z0 R1 n1 b
收藏 评论0 发布时间:2023-9-6 15:50

举报

0个回答

所属标签

相似分享

官网相关资源

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