单片机寄存器通俗解释,单片机专用寄存器和寄存器的区别

首页 > 实用技巧 > 作者:YD1662023-12-02 22:13:06

单片机的本质其实就是在操作寄存器,让单片机完成我们想要的动作例如点亮一个LED灯,STM32的库函数开发也不例外它只不过是将操作寄存器封装成一个个函数,我们只要配置指定函数的参数,再调用该函数自动把对应的寄存器配置好,其实本质还是操作寄存器,更加方便快捷,如果你只学库函数的话后期就有种空中阁楼的感觉,知其然不知其所以然。

二.STM32的系统架构

STM32 芯片是已经封装好的成品,主要由内核和片上外设组成。若与电脑类比,内核与外设就如同电脑上的 CPU 与主板、内存、显卡、硬盘的关系。

下面这张stm32系统结构的图非常重要,我们要理解stm32如何运作,以及各个外设挂载在哪条总线上,而我们主要学习的是挂载在 AHB系统总线上的外设

单片机寄存器通俗解释,单片机专用寄存器和寄存器的区别(1)

1.四个驱动单元(CUP)

Cortex™-M3内核DCode总线

Cortex™-M3内核系统总线System

通用DMA1

通用DMA2

2.四个被动单元(外设)

内部SRAM

内部闪存存储器FLASH

FSMC

AHB到APB的桥,它连接所有的APB外设

3.驱动单元

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。所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数

4. 被动单元

内部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 的重点,就是要学会编程这些外设去驱动外部的各种设备。

三.存储器映射

存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射,如果给存储器再分配一个地址就叫存储器重映射。

程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。数据字节以小端格式存放在存储器中。一个字里的最低地址字节被认为是该字的最低有效字节,而最高地址字节是最高有效字节。

1. STM32的存储空间

上面说的4GB但为什么是4GB,存储空间的大小是由芯片内CPU内的地址总线的数量来决定,而stm32芯片内部的总线为32根

内存被划分为一个个的内存单元,每个内存单元的大小是一个字节,为了能有效的访问到内存的每个单元就给内存单元进行编号,编号就被称为该内存单元的地址

怎样产生地址

32根地址线每根线 可以输出正电和负电(1 或 0)

单片机寄存器通俗解释,单片机专用寄存器和寄存器的区别(2)

分配好地址后,被控单元的 FLASH,RAM,FSMC 和 AHB 到 APB 的桥(即片上外设),这些功能部件共同排列在一个 4GB 的地址空间内。我们在编程的时候,可以通过他们的地址找到他们,然后来操作他们( C语言里的将地址解引用操作 * 取出内容对他们进行数据的读和写)。

单片机寄存器通俗解释,单片机专用寄存器和寄存器的区别(3)

2. 存储器区域功能划分

在这 4GB 的地址空间中,ARM 已经粗线条的平均分成了 8 个块,每块 512MB,每个块也都规定了用途每个块的大小都有512MB,显然这是非常大的,

单片机寄存器通俗解释,单片机专用寄存器和寄存器的区别(4)

首页 12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.