1、概述
在计算机中要访问存储区,都是通过地址来进行访问的,包括所有的外设(比如串口、内存、硬盘等),都对应有一个访问地址,地址就相当于门牌号,有了门牌号,我们才知道操作的是哪一个区域、哪一个外设。
最被大家熟知的是计算机内存,计算机内存有4G、8G,16G等等,对于程序员而言,要在代码中操作这些内存,肯定得知道内存的地址,此外,还需要会计算地址与内存大小的计算方法与对应关系。STM32作为微型计算机,原理也是一样。
本篇博客则以STM32F103为例,主要对地址的计算相关的问题进行阐述。
2、公式
注意:在计算机中一个地址,代表一个字节(1Byte),比如:地址0x00到0x01的大小为一个字节
计算地址和占用内存大小时,有以下关系:
1G = 1024M
1M = 1024K
1K = 1024Byte
1Byte = 8 bit
3、如何通过地址计算内存大小
STM32是32位单片机,其地址范围为:0x0000 0000 ——0xFFFF FFFF
要查找每个外设对应的地址,可以在对应的用户手册的Memory mapping章节,查询各个外设对应的起始地址、结束地址(比如SPI、串口、IIC、Flash等),
例如下图中,可以查询到:
外设SPI1的地址范围为:0x4001 3000 —— 0x4001 3400
外设Flash的地址范围为:0x0800 0000 —— 0x0801 FFFF
我们在这里以Flash Memory为例,计算一下STM32F103系列单片机的Flash Memory大小。
3.1、上图中可以查到Flash Memory地址范围为:
起始地址:0x0800 0000
结尾地址:0x0801 FFFF
3.2、则Flash Memory最大内存 = 地址差
= 结尾地址 - 起始地址
= 0x0001,FFFF
描述描述 | 计算公式计算公式 |
---|
0x0001,FFFF可以表示的地址个数0x0001,FFFF可以表示的地址个数 | 2∗216=2∗65536=131072个地址2∗216=2∗65536=131072个地址 |
即:FlashMemory内存大小一共是即:FlashMemory内存大小一共是 | 131072Byte(字节)131072Byte(字节) |
换算成K换算成K | 131072Byte1024=128K131072Byte1024=128K |
故:STM32F103系列单片机最大Flash Memory最大可以达到128K的内存,查询手册,在Description章节,可以看到介绍如下图:
如蓝色阴影部分描述,Flash Memory最大可以达到128K,说明上述计算正确。
3.3、小细节:
上述计算的地址范围为:0x0 0000——0x1 FFFF,大小为128K
可以平均分为两个部分,每个部分占64K:
地址范围地址范围 | 大小大小 |
---|
0x0,0000——0x0,FFFF0x0,0000——0x0,FFFF | 64K64K |
0x1,0000——0x1,FFFF0x1,0000——0x1,FFFF | 64K64K |
4、结论:
1、
结论结论 | 内容内容 |
---|
结论一结论一 | 每一个字节对应唯一的一个地址,每一个地址代表一个字节每一个字节对应唯一的一个地址,每一个地址代表一个字节 |
2、
描述描述 | 内存范围内存范围 | 最大内存大小最大内存大小 |
---|
16位机16位机 | 0x00,00−0xFF,FF0x00,00−0xFF,FF | 216=65536Byte=64K216=65536Byte=64K |
32位机32位机 | 0x0000,0000−0xFFFF,FFFF0x0000,0000−0xFFFF,FFFF | 232=4294967296Byte232=4294967296Byte =4194304K=4194304K =4096M=4096M =4G=4G |
关键字:STM32 内存大小 地址 对应关系 计算方法
引用地址:
STM32内存大小与地址的对应关系以及计算方法
推荐阅读最新更新时间:2024-03-16 16:05
stm32 adc dma多通道采样 数据错位 的解决方法
解决方法:不要采用连续转换模式 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; 需要时才实施转换 ADC_SoftwareStartConvCmd(ADC1, ENABLE); 转换后取消转换 ADC_SoftwareStartConvCmd(ADC1, DISABLE); 经过测试能够解决stm32 adc dma多通道采样 数据错位
[单片机]
STM32 USB学习笔记2
主机环境:Windows 7 SP1 开发环境:MDK5.14 目标板:STM32F103C8T6 开发库:STM32F1Cube库和STM32_USB_Device_Library STM32Cube库中提供了一些有关USB的例程,在其工程目录下的Applications目录中,这里打开STM3210E_EVAL目录,可以看到如下例程: 这里选取一个简单的例子CDC_Standalone,为一个USB通信例程,具体实现是一个USB转串口的功能,相当于USB串口线。把示例里面的inc和src目录下的文件拷贝到新建工程中,这里是把跟usb通信相关的文件放到了vcp目录下。文件目录结构如下: 其中B
[单片机]
STM32学习之旅⑤ SPI控制TFT,从底层到顶层的设计
一、认识其本质 (一)认识SPI SPI是串行外设接口(Serial Peripheral Interface)的缩写,SPI 总线是Motorola公司推出的同步串行接口技术,(关于同步还是异步,主要看通信双方的时钟线是否连在一起)。SPI由四根线完成数据传输,分别是SCK(时钟)、MOSI(主出从入)、MISO(主入从出)和SSEL(片选)。通讯时序图如下(当然很多SPI器件的数据手册都会给出响应的时序图): SPI主要特点有: 可以同时发出和接收串行数据,是一种全双工的通信; 可以当作主机或从机工作 提供频率可编程时钟 发送结束中断标志 写冲突保护 总线竞争保护等 结构简单 传输速度快,通常可以达到几兆到几十兆每秒,
[单片机]
STM32自学笔记——定时器及PWM输出
最基本的定时中断功能 1) TIM3 时钟使能。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 2) 初始化定时器参数 voidTIM_TimeBaseInit(TIM_TypeDef*TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); 第一个参数是确定是哪个定时器,这个比较容易理解。 第二个参数是定时器初始化参数结构体指针,结构体类型为 TIM_TimeBaseInitTypeDef,下面我们看看这个结构体的定义: typedef struct { uint16_t TIM_P
[单片机]
STM32上很多管脚功能可以重新映射
有很多I/O口,也有很多的内置外设,为了节省引出管脚,这些内置外设都是与I/O口共用引出管脚,ST称其为I /O管脚的复用功能,相信这点大家都很清楚,因为基本上所有单片机都是这么做的。但不知有多少人知道,很多复用功能的引出脚可以通过重映射,从不同的I /O管脚引出,即复用功能的引出脚位是可通过程序改变的。 这一功能的直接好处是,PCB电路板的设计人员可以在需要的情况下,不必把某些信号在板上绕一大圈完成联接,方便了PCB的设计同时潜在地减少了信号的交叉干扰。 复用功能引出脚的重映射功能所带来的潜在好处是,在你不需要同时使用多个复用功能时,虚拟地增加复用功能的数量。例如,STM32上最多有3个USART接口,当你需要更多UAR
[单片机]
STM32 ADC 采样频率的确定
(4)16.7 可编程的通道采样时间 ADC 使用若干个ADC_CLK 周期对输入电压采样,采样周期数目可以通过 ADC_SMPR1 和ADC_SMPR2 寄存器中的SMP 位而更改。每个通道可以以 不同的时间采样。 总转换时间如下计算: TCONV = 采样时间+ 12.5 个周期 例如: 当ADCCLK=14MHz 和1.5 周期的采样时间 TCONV = 1.5 + 12.5 = 14 周期 = 1 s SMPx :选择通道x的采样时间 这些位用于独立地选择每个通道的采样时间。在采样周期中通道选择位必须保持不变。 000:1.5周期 100:41.5周期 001:7.5周期 101:55.5周期
[单片机]
STM32 时钟配置方法
一、在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 ①HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③LSI是低速内部时钟,RC振荡器,频率为40kHz。 ④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。 ⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。 二、在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法:如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: ①对于1
[单片机]
基于STM32的实时心率检测仪设计
一、开发环境介绍 主控芯片: STM32F103ZET6 代码编程软件: keil5 心率检测模块: PulseSensor WIFI模块: ESP8266 --可选的。直接使用串口有线传输给上位机也可以。 上位机: C++(QT) 设计的。 支持PC机电脑、Android手机显示。 与上位机的传输协议: 支持串口传输、WIFI网络传输两种。 如果是PC就可以直接连接串口传输数据,如果不方便可以直接通过WIFI---TCP协议传输。 二、PulseSensor心率模块介绍 PulseSensor 是一款用于脉搏心率测量的光电反射式模拟传感器。 可以将其佩戴于手指、耳垂、手腕等处,通过杜邦线--导线将引脚连接到单片机,可将采集到
[单片机]