打印
[STM32F1]

STM32单片机的RAM和FLASH

[复制链接]
348|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenci2013|  楼主 | 2024-11-20 21:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   存储器是单片机结构的重要组成部分,存储器是用来存储编译好的程序代码和数据的,有了存储器单片机系统才具有**功能。按照存储介质的特性,可以分“易失性存储器”和“非易失性存储器”两类。易失性存储器断电后,里面存储的内容会丢失;非易失性存储器断电后,数据可以依然保持。
2、单片机的存储器
    如下图所示是STM32F103RB系列单片机所使用的存储器大小,Flash为128KB,RAM为20KB,这里的RAM是指SRAM。
    这两个存储器的寄存器输入输出端口被组织在同一个4GB的虚拟线性地址空间内。可访问的存储器空间被分成8个主要块,每个块为512MB。Flash用来存储编译好的程序文件,SRAM用来存储运行程序时所创建的临时数据。所以如果不加入外置存储器,那么程序里的东西就会出现在这两个存储器中。
    下图为STM32F103RB单片机的内存映射图(部分),可以看到画红圈的两个就是SRAM和Flash存储器。不知道大家有没有注意,当使用J-Flash软件给stm32下载bin文件的时候需要填写起始地址,那个0x08000000其实就是Flash存储器的起始地址。
STM32RB内存映射
3、关于编译器生成的文件    如果你玩过单片机,那你应该对Keil这款软件不会感到陌生,下图是我的那款OLED时钟的软件用Keil编译后的编译信息。
    Code:是程序中代码所占字节大小;
    RW-data:已初始化的可读写全局/静态变量;
    那么这个程序占用的Flash存储器的空间大小是多少呢?程序所占Flash空间大小=Code+RO data+RW data=生成的bin文件大小。
    那么这个程序占用的SRAM存储器的空间大小是多少呢?程序固定占用RAM大小=RW data+ZI data。
    这些信息除了在编译器下方的信息栏里面看到,也可以在项目文件里的.map文件的最下面找到,如下图:
4、数据在存储器上的存储结构
    程序在Flash上的存储结构如下图所示,通过阅读hex文件和MDK下调试综合提炼出来的。其中,ZI-data对应未初始化数据段,RW-data对应已初始化数据段,Code对应代码段。
Flash上的存储结构
    数据在SRAM上的结构,如下图所示。这部分大家可以参考上面的内存映射图来理解。
SRAM上的存储结构

使用特权

评论回复
沙发
tpgf| | 2024-12-3 15:34 | 只看该作者
不是说哪个厂商的  而是这两种介质的性质决定了他们的差别

使用特权

评论回复
板凳
renzheshengui| | 2024-12-6 12:59 | 只看该作者
RAM用于存放程序运行时的数据,包括栈、堆以及动态分配的内存和已初始化的全局变量、静态变量

使用特权

评论回复
地板
wowu| | 2024-12-6 16:26 | 只看该作者
通过写入[size=0.875]QUADSPI_CR寄存器来配置QSPI的控制参数,包括使能位、超时计数器使能位、采样移位设置、FIFO阈值等

使用特权

评论回复
5
xiaoqizi| | 2024-12-6 19:07 | 只看该作者
FLASH是非易失性存储器,断电后数据不会丢失。它允许在操作过程中被擦写,但擦写次数有限

使用特权

评论回复
6
木木guainv| | 2024-12-6 20:56 | 只看该作者
在STM32单片机中,FLASH的容量也根据型号不同而变化,如STM32F103C8T6拥有64KB或128KB的Flash

使用特权

评论回复
7
磨砂| | 2024-12-6 22:41 | 只看该作者
程序执行时,代码和常量从FLASH中读取,而初始化过的全局变量和静态变量会在程序启动时被复制到RAM中

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

110

主题

6414

帖子

4

粉丝