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

STM32的FLASH和SRAM的使用情况分析

[复制链接]
STMCU-管管 发布时间:2020-10-13 15:12
STM32的FLASH和SRAM的使用情况分析
01
前言
6 k& n  c: Z: J
: c( T0 `0 T% a) u
STM32片上自带FLASH和SRAM,简单讲FLASH用来存储程序的,SRAM是用来存储运行程序中的中间变量。本文详细分析下如何查看程序中FLASH和SRAM的使用情况。- j2 x6 f/ R/ t* R; z
本文开发工具: keil56 d7 w# \; A- ]& h5 y4 Q/ `9 Z) A
芯片: STM32F105VCT6& a, x( h! c" J2 S7 q! D

# m7 R  Y, o5 [8 B5 u/ M. ]- |# H
8 Z5 n. U  G. [7 F
02
FLASH和SRAM介绍
; K+ c  l# {9 W* u
; u6 F% {& V/ s4 p" ^: [2 J) z8 m
FLASH存储器又成为闪存,它与EEPROM都是掉电后数据不丢失的存储器,但是FLASH的存储容量都普遍的大于EEPROM,在存储控制上,最主要的区别是FLASH芯片只能一大片一大片地擦除,而EEPROM可以单个字节擦除。
8 p2 I7 s5 D! i& b, s' i3 T8 F" J( s- S0 w
+ H2 W9 e% `" c% q6 b3 g
SRAM是静态随机存取存储器。它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。STM32F1系列可以通过FSMC外设来拓展SRAM。! x* m0 a8 g8 r* b
3 N3 h8 T9 @0 K4 m# s
7 i5 t. h- {4 u7 T
注意:SRAM和SDRAM是不相同的,SDRAM是同步动态随机存储器,同步是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。STM32的F1系列是不支持SDRAM的。
/ r3 }3 C6 I) `+ A
" P7 E/ s# e% M" m) a
; J9 v# L; b1 ^. q& ~
stm32不同型号的SRAM和FLASH大小是不相同的,可在datasheet中查看如下图:1 G6 Q- v4 Q# g; x" d8 Z' s6 R) B
11.png
12.png

$ |0 }( w' u6 S  |5 n1 ]& |

2 w5 ?8 S. s4 Q7 ~2 A1 ^
- M) \1 }4 F5 j8 P
5 f* I* Z/ D' k* ^- O) [  r9 q0 M, N

+ h: R8 ?4 k6 \7 @: m) U5 q) E
03
编译结果分析

% }, L1 R; q- v  L( L3 P5 O

. ?8 G6 z  [# [9 ^. e* J& k, d. Q7 }( w8 s
! M- T- {* f+ X% G* c
在keil中编译结果如下图:9 `9 R! b" p+ A4 z( }
13.png
+ x) k; T8 B& o# w8 G1 q+ A- o
打开生成的map文件拉到最后可看到如下:2 T  y/ J$ E" u, C' d( D
14.png 0 i0 T3 V+ x0 A4 N
编译结果里面几个的含义
9 s1 U) d+ h& m0 s8 ~# \, dCode:代码空间,本质是ARM指令( FLASH)。
. x" P+ L+ I( x9 MRO-data:即 Read Only-data, 表示程序定义的常量,如 const 类型( FLASH)。
2 n0 A4 S& W4 r0 CRW-data:即 Read Write-data, 非0初始化的全局和静态变量占用的RAM大小,同时还要占用等量的ROM大小用于存放这些非0变量的初值(FLASH+RAM)。
5 Z+ k3 Z" T$ w; Q" B. S8 ]ZI-data:即 Zero Init-data, 0初始化的内存区的大小(该区域3个用途:0初始化的全局和静态变量+堆区+栈区)(RAM)。
8 u+ x; ^# h. a% d0 ?0 d: z+ O由上可知:! x9 c8 c- f1 X7 ^+ k* V9 P- ?. R
程序占用FLASH=Code + RO-data + RW-data 即map文件中ROM size          2 i, e+ ~' O* H; E
程序占用RAM  = RW-data + ZI-data     即map文件中RW size' ~/ {: {5 f) _" S8 z
/ a8 }& U3 u& m' v* Q' d6 q. y
4 E8 }, r- Z+ t6 H  G: D# Z- @5 x
常见的俩个疑问:
) B5 v8 R8 f. u: w& ?1、RW-data为什么会即占用Flash又占用RAM空间?
" G" q& o9 s: A) A' Q由前文知道RAM掉电数据会丢失,RW-data是非0初始化的数据,已初始化的数据需要被存储在掉电不会丢失的FLASH中,上电后会从FLASH搬移到RAM中。( F( R# {2 |5 h/ f1 x- i: ?2 d
+ W6 c/ E7 M3 w3 q
0 C* V9 Y5 j; r! s: L% w; m# F1 B
2、为什么烧录的镜像文件不包含ZI-data呢?
2 d) g) {# R0 G我们都知道在烧写程序的时候,需要烧写bin文件或者hex文件到STM32的flash中,被烧写的文件称为镜像像文件image。image的内容包含这三个Code 、 RO-data 和 RW-data。
8 p) G0 t  |% ?6 V3 x/ P通过第一个问题大家应该有所理解,因为ZI数据是0,没必要包含,只要在程序运行前把ZI数据区域一律清零即可,包含进去反而浪费Flash存储空间。
- R4 v2 R/ `2 @" D' z1 Z9 s
收藏 1 评论1 发布时间:2020-10-13 15:12

举报

1个回答
zzfei90 回答时间:2020-10-21 13:51:11
不知道为什么F105或107不出大flash的型号,我们现在程序空间已经快用完了,但因为还在不断新增功能,硬件PCB又不能再修改(换F2或F4引脚都不兼容,程序也不兼容,无法兼容之前已经出货的设备),所以在寻找更大容量的,一直都无果。。连个兼容的型号都没有

所属标签

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