一、STM32F103实物芯片解析
图1
如图1所示,就是开发板上的100pin引脚的STM32F103芯片了。上一篇文章以及介绍到了芯片内核Cotres-M是ARM公司生产的,ST公司不参与设计,而ST公司的责任就是再内核的基础上搭载片上外设,如常见的GPIO等。
图2,已经把ARM公司和ST公司的职责介绍的很详细了,简单来说ARM只设计内核,而ST公司设计芯片片上外设,两者构成了成品的STM32芯片。
图2
二、寄存器存储器基本知识
存储器和寄存器都是大学本科《数字电子技术》的内容。数电是对数字信号处理,模电则是对模拟信号处理。何为数字信号?为了方便初学者理解我们做出一下解释:
1、数字信号:只有0和1两种状态,客观认为两种状态是瞬态转换的。如:方波。
2、模拟信号:是一个连贯的信号,可以拿中学数学中的函数想象,如:正弦函数
数电的发展历程大致如下:
P型/N型半导体——二极管/三极管/场效应管——逻辑门电路——组合逻辑电路
P型/N型半导体——二极管/三极管/场效应管——逻辑门电路——RS触发器——时序逻辑电路
而存储器和寄存器都是属于时序逻辑电路中的一类,两者其实区别不大,都拥有记忆功能,我们如何区分组合逻辑电路和时序逻辑电路呢?就看是否有记忆元件——RS触发器的存在。含义记忆元件就是时序逻辑电路。当然了,想要具体了解还是要学数电内容。
什么是存储器、寄存器?
1、存储器:用于大规模的数据存储,可以存储大量的信息,支持随机访问,主要包括各种内存类型。
2、寄存器:用于CPU内部的高速数据存储和操作,存储容量较小,但访问速度极快,是计算机中关键的存储组件。
总结:都是用来存放二进制数据的,但是简单来说就是存储容量的区别,你可以想象一部1TB手机和一部64GB手机的区别,两者最主要其实只有存储容量的区别(忽略访问速度等条件)。
三、寄存器映射
如果你学过《高等数学》,那么高数第一章叫做映射与函数,函数就是属于映射的一种类型。存储器本身并不具有地址信息,它的地址是由芯片厂商或用户人为去分配,给存储器分配地址的过程就称为存储器映射。如果给存储器再分配一个地址就叫存储器重映射。可以简单理解给一个存储器取了一个别名,我们工程上习惯称之为“地址”,通常用0X开头的十六进制数字去表示它再计算机当中的地址,只有有了地址才方便去寻找到相关的寄存器/存储器,这可以简单理解位“寻址”。
图3
我们实际用C语言编程都是对寄存器编程,这是因为存储器是一个很大的操作空间,如果直接对它操作,肯定没有效果,要具体落实到它地下的block块。在一个4GB的内存中,平均分成了8个块,而每一个块有512MB.
图4
具体不明白各个存储器block的用途也没有关系,我们可以看到,每一个存储器block出厂的时候都有他们的用途,并且都有相对应的地址,这个地址非常重要,后面进行寄存器映射的时候就要对他们进行“基地址偏移”。通俗的话来说就是每个block块的范围里其实还分为许多外设寄存器,我们要对外设寄存器赋值操作,就要先寄存器偏移然后再操作。
总结:寄存器就是属于各个存储器block中的外设了,列如存储器Block2上有三根总线——APB1、APB2、AHB。而APB1总线和APB2总线上搭载了列如ODR寄存器等,我们要取ODR寄存器的地址,就是先要基地址偏移这一步来完成相对应的寄存器映射的操作。也就是说,我们需要哪些相应功能的寄存器,只要完成寄存器映射的功能即可。