在学习STM32之前有必要了解一下ARM架构,以下相关ARM架构的知识来自百度百科:
ARM架构,曾称进阶精简指令集机器(Advanced RISC Machine)更早称作Acorn RISC Machine,是一个32位精简指令集(RISC)架构。还有基于ARM设计的派生产品,重要产品包括Marvell的XScale架构和德州仪器的OMAP系列。
STM32芯片内部构造
以STM32F103为例,它采用的是Cortex-M3内核,内核即CPU,他是由ARM公司设计。内核之外的部件被称为片上外设,如GPIO、USART、I2C、SPI等都叫做片上外设。如下图所示:
芯片和外设之间是通过各种总线连接的,其中驱动单元有四个,被动单元也有四个。驱动单元就是平时所说的CPU,被动单元指的是外设。下面简要介绍一下各个部件。
驱动单元
-
ICode 总线 ICode 中的 I 表示 Instruction,即指令。内核通过ICode 总线读取内部FLASH代码指令来执行程序。
-
DCode 总线 DCode 中的 D 表示 Data,即数据,那说明这条总线是用来取数的。因为数据可以被 Dcode 总线和 DMA 总线访问(向flash,SRAM,或外设数据寄存器里面取数据),所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数,取到的数据可以暂存在Cortex™-M3内核里面的寄存器在进行处理。
-
系统总线System 系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统总线来完成的。
-
DMA 总线 DMA 总线与DCode总线一样主要是用来传输数据,但Dcode总线传输数据要占用内核(cpu)的资源,而DMA总线相当于独立于内核cpu但帮助内核cpu传输数据而不用占用内核(cpu)的资源,就是在DMA传输数据的同时内核cpu可以干别的事情比如点亮一个LED灯
-
总线矩阵 总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁,仲裁利用轮换算法。因为数据可以被 Dcode 总线和 DMA 总线访问,数据可以是在某个外设的数据寄存器,可以在SRAM,可以在内部的 FLASH。所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数
被动单元
-
内部FLASH 简单介绍在flash存储内容:我们写好的程序编译之后都是一条条指令(二进制代码),存放在 FLASH 中,我们常量或常变量C 语言中的 const 关键字修饰也存放在FLASH
-
内部SRAM 就是我们常说的电脑内存条,程序函数内部的局部变量和全局变量,堆(malloc分配)栈(局部变量)等的开销都是基于内部的SRAM。内核通过 DCode 总线来访问它
-
FSMC FSMC 的英文全称是 Flexible static memory controller,叫灵活的静的存储器控制器,是 STM32F10xx 中一个很有特色的外设通过FSMC我们可以扩展内存,如外部的SRAM,NANDFLASH 和 NORFLASH。但有一点我们要注意的是,FSMC 只能扩展静态的内存,即名称里面的 S:static,不能是动态的内存,比如 SDRAM 就不能扩展。
-
AHB 到 APB 的桥 两个AHB/APB桥在AHB和2个APB总线间提供同步连接。APB1操作速度限于36MHz,APB2操作于全速(最高72MHz),上面挂载着 STM32 各种各样的特色外设。我们经常说的 GPIO、串口、I2C、SPI 这些外设就挂载在这两条总线上,这个是我们学习 STM32 的重点,就是要学会编程这些外设去驱动外部的各种设备。
什么是寄存器?
寄存器是CPU内部用来存放数据的小型存储区域,用于暂时存放参与运算的数据和运算结果,所以被叫做寄存器。
寄存器电路是由锁存器或触发器构成的,一个触发器或锁存器储存一位二进制数,一个8为寄存器至少含8个触发器或锁存器。
寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。也可以说是给特定功能的单元取的别名,寄存器是单片机内部的控制机构。
寄存器地址=总线基地址+外设基于总线地址的偏移量+寄存器相对于外设基地址的偏移量
存储器映射:芯片厂商给存储器分配地址的过程就成为存储器映射,如果给存储器再分配一个地址就叫存储器重映射。寄存器是一类特殊的存储器,它的每个位都有特定的功能,可以实现对外设功能的控制,给寄存器的地址命名的过程就叫做寄存器映射。
在STM32中,ST官方将各个外设寄存器的地址进行了封装,总线或外设都以他们的名字作为宏名,最后把寄存器封装成结构体。在操作寄存器时,我们可以直接使用宏定义好的结构体类型指针,使用时直接用相应指针对结构体成员寄存器进行访问即可。文章来源:https://www.toymoban.com/news/detail-836784.html
接下来的一段时间里会对STM32重新进行认识,会对其中的的相关知识进行梳理。欢迎关注我的公众号,晚霁见月,我们一同交流学习。文章来源地址https://www.toymoban.com/news/detail-836784.html
到了这里,关于STM32之寄存器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!