设计与开发

单片机寄存器与ram 一篇文章讲透单片机的RAM和FLASH

小编 2024-10-31 设计与开发 23 0

一篇文章讲透单片机的RAM和FLASH

最近在一个问答社区回答了一个问题,关于单片机存储器的,于是有了想专门写一篇关于单片机存储器的想法。作为单片机内部一个重要组成部分,存储器占有很重要的地位,今天就来聊聊我对于单片机的内部存储器RAM和FLASH的一些认识和理解。

1、先聊聊存储器

存储器是单片机结构的重要组成部分,存储器是用来存储编译好的程序代码和数据的,有了存储器单片机系统才具有记忆功能。按照存储介质的特性,可以分“易失性存储器”和“非易失性存储器”两类。易失性存储器断电后,里面存储的内容会丢失;非易失性存储器断电后,数据可以依然保持。

存储器分类

2、单片机的存储器

如下图所示是STM32F103RB系列单片机所使用的存储器大小,Flash为128KB,RAM为20KB,这里的RAM是指SRAM。

STM32F103RB内存大小

这两个存储器的寄存器输入输出端口被组织在同一个4GB的虚拟线性地址空间内。可访问的存储器空间被分成8个主要块,每个块为512MB。Flash用来存储编译好的程序文件,SRAM用来存储运行程序时所创建的临时数据。所以如果不加入外置存储器,那么程序里的东西就会出现在这两个存储器中。

下图为STM32F103RB单片机的内存映射图(部分),可以看到画红圈的两个就是SRAM和Flash存储器。不知道大家有没有注意,当使用J-Flash软件给stm32下载bin文件的时候需要填写起始地址,那个0x08000000其实就是Flash存储器的起始地址。

STM32F103内存映射图

3、关于编译器生成的文件

如果你玩过单片机,那你应该对Keil这款软件不会感到陌生,下图是我的那款OLED时钟的软件用Keil编译后的编译信息。

KEIL编译信息

很多人并不一定知道Program Size的含义,我来给大家解释一下。

Code: 是程序中代码所占字节大小;

RO-data: 程序只读的变量,也就是带const的,和已初始化的字符串等;

RW-data: 已初始化的可读写全局/静态变量;

ZI-data: 未初始化的可读写全局/静态变量;

那么这个程序占用的Flash存储器的空间大小是多少呢?程序所占Flash空间大小=Code+RO data+RW data=生成的bin文件大小

那么这个程序占用的SRAM存储器的空间大小是多少呢?程序固定占用RAM大小=RW data+ZI data

这些信息除了在编译器下方的信息栏里面看到,也可以在项目文件里的.map文件的最下面找到,如下图:

.map文件信息

4、数据在存储器上的存储结构

程序在Flash上的存储结构如下图所示,通过阅读hex文件和MDK下调试综合提炼出来的。其中,ZI-data对应未初始化数据段,RW-data对应已初始化数据段,Code对应代码段。

STM32的Flash存储结构

数据在SRAM上的结构,如下图所示。这部分大家可以参考上面的内存映射图来理解。

STM32的SRAM存储结构

5、总结

至此我相信大家应该对stm32单片机的内部存储有了更进一步的认识。其实如果想更深入的了解单片机的运行轨迹,我建议大家来详细研究一下stm32单片机的上电内存读取过程,如果搞明白了这块收获会是非常大的。后面有机会我也会对这块进行深入的总结,并整理成文章发出来,与大家一起分享。

单片机寄存器是什么?单片机寄存器有哪些分类?

单片机中有很多种特殊功能,今天宇凡微来为大家介绍”单片机的寄存器是什么?“以下内容将详细分析单片机寄存器 的各个参数。

单片机寄存器是什么?

一、单片机寄存器是什么?

寄存器是一种特殊的存储器,主要用于存储和检查微机的状态。CPU寄存器用于存储和检查CPU的状态,具体包括计算中途数据、程序因中断或子程序分支时的返回地址、计算结果为零时的负值、计算结果为零时的信息、进位值等。

由于CPU的通用寄存器在硬件上直接与CPU相连,因此它们的访问速度比RAM更快,后者通过内部总线访问数据。

单片机的外围功能控制寄存器用于设置外围功能,例如称为通用I/O GPIO的I/O端口、定时器、串行通信、AD转换器和DA转换器。有显示外围功能状态的状态寄存器,存储AD转换器转换结果的结果寄存器,以及存储通信功能中发送/接收数据的发送/接收数据寄存器。

我们可以直接从程序中设置寄存器,但是通常使用厂商们提供的固件库(设备驱动),所以寄存器不是直接设置,而是间接设置的。

二、单片机寄存器的分类

1、SCON控制寄存器

SM2——多机通信控制位:是工作于方式2和方式3,SM2位主要用于方式2和方式3。接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接收到的数据放弃。当SM2=0时,就不管第9位数据是0还是1,都会将数据送入SBUF,并发出中断申请。工作于方式0时,SM2必须为0;

REN允许接收位:用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收;

RB8接收数据位8:在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征;

TB8发送数据位8:在方式2和方式3中,TB8是要发送的——即第9位数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址;

RI接收中断标志位:可寻址标志位。接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成;

在串口中断处理时,TI,RI都需要软件清"0",硬件置位后不可能自动清0,此外,在进行缓冲区操作时,需要ES=0,以防止中断出现。

2、AUXR辅助寄存器

AUXR.0:S1BRS,如果为1那么串口1的波特率发生器为独立波特率发生器,否则为定时器1

AUXR.1:EXTRAM,为1则可以使用内部扩展RAM;

AUXR.2:BRTx12,为1则独立波特率发生器不分频,否则12分频;

AUXR.3:S2SMOD,为1串口2波特率加倍,否则不加倍;

AUXR.4:BRTR,为1则允许独立波特率允许,否则不允许;

AUXR.5:UART_M0x6,为1则串口模式0为2分频,否则为12分频;

AUXR.6:T1x12,为1则定时器1不分频,否则12分频;

AUXR.7:T0x12,为1则定时器0不分频,否则12分频。

3、串口寄存器SBUF

SBUF是指串行口中的两个缓冲寄存器,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的,但地址是重叠的。它们都是字节寻址的寄存器,字节地址均为99H;

串行发送数据时,CPU向SBUF写入数据 SBUF=date; //发送数据;

串行接收数据时,CPU从SBUF读出数据 date=SBUF; //接收数据。

推荐阅读:“揭秘”单片机主要寄存器有哪些?

以上就是深圳宇凡微为大家介绍关于单片机寄存器 是什么和单片机寄存器有哪些分类的全部内容。

原文:单片机寄存器是什么?单片机寄存器有哪些分类?-深圳宇凡微

相关问答

单片机 RAM 和ROM是什么意思?-ZOL问答

〔单片机中也就是数据!〕。当这个活动开始的时候,老大cpu就会到rom这里复制里面的全部内容〔有特别标明的除外,一般是不常用的数据〕放到RAM里面运行。当需要...

单片机 中,ROM, RAM ,和各种 寄存器 的功能是什么,地址和数据存放...

RAM存临时数据(单片机内所有的寄存器都是定义在RAM中的,另外,RAM也空出了一部分地址给用户使用,堆栈就可以在这里建立)地址:你得明白地址是个什么东西,是通过门...

2. 单片机 内部 RAM 可分为几个区?各区的主要作用是什么?

内部RAM一共三个区,第一区:低128字节(物理地址是00H---7FH),C语言用data修饰,特点是直接寻址,寻址速度最快,在实际应用中,频繁使用的变量最好定义到这个区,因...

c51 单片机 的片内 RAM 容量有多少?

C51单片机的片内RAM容量为128字节。这128字节被分为两个部分,包括8字节的特殊功能寄存器区域和120字节的数据RAM空间。特殊功能寄存器用于控制和配置C51单片机...

单片机 里面DPTR是什么 寄存器 ,作用是什么?

DPTR是某些单片机中一个功能比较特殊的寄存器,是一个16位的特殊功能寄存器。1、DPTR寄存器:DPTR是某些单片机中一个功能比较特殊的寄存器,是一个16位的特殊功...

单片机 中为什么有些特殊功能 寄存器 的地址相同

[回答]51系列单片机,特殊功能寄存器在片内ram高128字节,即80H到FFH单元。主要有PC,TMOD,TCON,SCON,PCON,IE,IP等。楼主看下单片机的书就明白了51系列单片...

cpu和 ram 有io接口吗?

开始的时候有的。1.从IBMPCXT架构开始...一开始PC的设计中,CPU/RAM/IO都是被一条总线(BUS)连接起来,所有的部件都必须在同步的模式下面工作,由CPU来...

单片机 试题解答1.当CPU响应外部中断0后,PC的值是(A)A.0003HB...

[最佳回答]B.2000HC.000BHD.3000H2.当MCS-51复位时,下面说法准确的是(A)A.PC=0000HB.SP=00HC.SBUF=00HD.(30H)=00H3.要用传送指令访...

单片机寄存器 有几种,分别有什么用途_土巴兔装修问答

工作寄存器:R0-R7注意:用名字直接寻址可位寻址的寄存器:20-2FH注意,可位寻址通用寄存器:00-7FH注意,可直接寻址,也可间接寻址间接寻址寄存器:80H-FF...

ram 区和io口是统一编址?

但是,却需要设置一套专门的读写I/O的指令和控制信号。统一编址方式:这种编址方式是把I/O端口的寄存器与数据存储器单元同等对待,统一进行编址。统一编址的优点...

猜你喜欢