【STM32学习】-------- STM32的存储器和时钟框图

一,STM32的存储器映像

STM32的相关认识:
STM32是32位CPU数据总线是32位的。STM32的地址总线是32位的(地址总线是32位不是由数据总线是32位决定的),所以
STM32可以访问的地址容量是:4GB(2的32次方Byte)。STM32肯定用不完4GB的空间的,所以就有了:逻辑上的地址、实际上的地址。
存储器映像就是告诉我们STM32设计时是如何使用这4GB的逻辑地址的。还有一点需要知道,ARM是内存与IO统一编址的,也就是说STM32的寄存器是可以像访问内存一样直接访问 的。

STM32的局部存储映像如下
在这里插入图片描述

STM32的实际地址安排

地址范围对应存储类型
0x00000000 - 0x07FFFFFF128MB 映射区
0x08000000 - 0x0801FFFF128KB Flash
0x1FFFF000 - 0x1FFFF8002KB System Memory
0x1FFFF800 - 0x1FFFF9FF512B option bytes

二,STM32的位带操作

字的概念
计算机进行数据处理时,一次存取、加工和传送的数据长度称为字(word)。一个字通常由一个或多个(一般是字节的整数位)字节(固定为8个bit位)构成。例如286微机的字由2个字节组成,它的字长为16;486微机的字由4个字节组成,它的字长为32位。计算机的字长决定了其CPU一次操作处理实际位数的多少,由此可见计算机的字长越大,其性能越优越。

位带操作:
Cortex-M3存储器映像包括两个位段(bit-band)区。这两个位段区将别名存储器区中的每个字映射到位段存储器区一个位,在别名存储区写入一个字具有对位段区的目标位执行读-改-写操作的相同效果。
在STM32F10x里,外设寄存器和SRAM都被映射到一个位段区里,这允许执行单一的位段的写和读操作。

下面的映射公式给出了别名区中的每个字是如何对应位带区的相应位的:
bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)
其中:
− bit_word_addr 是别名存储器区中字的地址,它映射到某个目标位。
− bit_band_base 是别名区的起始地址
− byte_offset 是包含目标位的字节在位段里的序号
− bit_number 是目标位所在位置( 0-31)

下面的例子说明如何映射别名区中SRAM地址为0x20000300的字节中的位2:
0x22006008 = 0x22000000 + (0x30032) + (24).
对0x22006008地址的写操作和对SRAM中地址0x20000300字节的位2执行读-改-写操作有着相同的效果。
读0x22006008地址返回SRAM中地址0x20000300字节的位2的值(0x01 or 0x00)

为什么要有位带操作?
因为STM32本身只支持8、16、32位的操作,而不支持位操作。
但是我们实际编程中有对
1位单独操作
的需求。一般是这么做的:因为STM32不支持位操作,所以我们需要对32位进行整体操作。我们一般是读出整个的32位,然后对其中一位做操作后再整体32位写回去。这么做是可以的,但是效率低。
如何改进效率?答案肯定是想一个办法能够直接一次性修改那一位同时还不影响其他位。如果硬件不支持是没办法的,除非硬件给你支持位操作。而ARM又不支持位操作,所以发明了位带操作来替代。位带操作的思路是不让你直接单独操作这一位,而是把这一位给你映射到别的某个地方的32位,然后你在别的地方操作那个32位就相当于是操作这里的这1位。

别名存储器区大小等于位段存储器区大小的32倍。
位带操作的核心问题就是:如何由位段存储器区地址,计算出别名存储器区的地址

三,STM32的启动模式

三种启动模式
(1)启动模式,是研究STM32上电复位后从哪里去执行程序的问题
(2)用户闪存存储器区是给我们设计来放置用户写的代码的,我们程序员写的代码烧录时就被烧录到这里了,正常工作状态下就要把STM32设置为从这里启动。
(3)系统存储器区在非常规情况下用,用来实现ISP功能的。
(4)内嵌SRAM区,这种也是非常规的,用来实现调试器调试功能的。

如下:
在这里插入图片描述

ISP和IAP
(1)ISP就是in-system programming(在系统烧录,在系统编程)。以前要烧录代码bin文件到单片机内部的flash中是需要借助专用的烧录器的,比较麻烦。后来我们就需要一种不用烧录器也不用把单片机从板子上卸下来的烧录方法,这种方法就是ISP。一般ISP都是PC机通过串口把bin/hex文件直接isp到单片机内部flash中。
(2)IAP就是in-application programming(在应用编程,在应用烧录,在线升级),IAP的核心是用户需要在自己的应用程序中去操作单片机内部flash的控制器的寄存器,实现对内部flash的烧录功能。然后IAP的时候用户程序通过串口(usb、ethernet)来接收PC发送过来的bin/hex文件,然后将之烧录到内部flash中去完成IAP。完成后再次启动后就会从用户存储器区执行,更新就会起效果。一般实现iAP需要人为的将用户存储器区分为2部分:bootloader+app

四,STM32的时钟框图

在这里插入图片描述

(1)时钟源:纯内部、内外部(晶振)、纯外部
(2)PLL(锁相环电路),功能就是倍频,2个可选PLL源(PLLSRC控制),倍频可设置(PLLMUL控制)
(3)时钟通道与流向、分频
(4)完全独立的多个时钟

用户可通过多个预分频器配置AHB、高速APB(APB2)和低速APB(APB1)域的频率。 AHB和APB2域的最大频率是72MHZ。 APB1域的最大允许频率是36MHZ。

(1)注意时钟节点名称:
HSI、HSE、LSI、LSE、
PLLCLK、SYSCLK、
USBCLK、HCLK、FCLK、PCLK1、PCLK2、ADCCLK、RTCCLK、IWDGCLK、

时钟相关的寄存器
基地址,查memory map图得到,然后配合偏移量得到寄存器地址。
(1)RCC_CR 0x40021000 重要
(2)RCC_CFGR 0x40021004 重要
(3)RCC_CIR
(4)RCC_APB2RSTR 复位外设时钟的
(5)RCC_APB1RSTR
(6)RCC_AHBENR 外设时钟开关 重要
(7)RCC_APB2ENR 重要
(8)RCC_APB1ENR 重要
(9)RCC_BDCR
(10)RCC_CSR

寄存器位一般有三种:状态位、开关位、设置值位

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
stm32--tsl256.zip_stm32是一个压缩文件,其中包含了与stm32和tsl256芯片相关的文件和代码。stm32是一种32位的单片机系列,由STMicroelectronics公司推出。它具有高性能、低功耗和丰富的外设接口,适用于各种嵌入式系统应用。tsl256是一种环境光传感器芯片,用于检测周围环境的光照强度。 这个压缩文件可以包含stm32芯片和tsl256传感器之间的通信协议、引脚连接方式、初始化代码以及一些示例应用程序。通过使用这些文件和代码,开发人员可以很方便地在stm32上使用tsl256传感器来测量光照强度。例如,可以通过读取tsl256传感器输出的模拟电压值,转换为相应的光照强度数值。开发人员可以根据需要进行修改和定制,以适应具体的应用场景。 使用stm32--tsl256.zip_stm32文件,开发人员可以节省大量的开发时间和精力。他们无需从零开始编写通信协议和初始化代码,也无需从头研究如何与tsl256传感器进行交互。相反,他们可以直接使用这些提供的文件和代码,快速实现与tsl256传感器的集成,并进行光照强度的测量和应用开发。 总之,stm32--tsl256.zip_stm32是一个方便开发人员在stm32上使用tsl256传感器的压缩文件。它包含了相关的文件和代码,可以用于通信协议、引脚连接、初始化以及示例应用程序。通过使用这些文件和代码,开发人员可以快速、方便地实现在stm32上使用tsl256传感器进行光照强度测量和应用开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值