一、STM32F103系列芯片的地址映射和寄存器映射原理
1、寄存器的基本含义
寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。寄存器是中央处理器内的组成部分。寄存器是有限存储容量的高速存储部件,它们可用来暂存指令、数据和位址。
2、地址映射和寄存器映射原理
在存储器的区域单元中,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到每个单元的起始地址,然后通过 C 语言指针的操作方式来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
3、GPIO端口的初始化设置的一般步骤
- 时钟配置:首先需要使能GPIO端口所在的时钟,以便可以访问该端口。在STM32F103系列芯片中,时钟控制器(RCC)负责控制各种时钟,可以通过设置RCC_APB2ENR寄存器的相应位来使能GPIO端口所在的时钟。
- 输入输出模式设置:GPIO端口可以设置为输入模式或输出模式,以便读取外部信号或控制外部设备。在STM32F103系列芯片中,可以通过设置GPIOx_CRL和GPIOx_CRH寄存器的相应位来配置GPIO端口的输入输出模式。
- 最大速率设置:GPIO端口的最大速率决定了输出信号的上升和下降时间,可以通过设置GPIOx_CRL和GPIOx_CRH寄存器的相应位来配置GPIO端口的最大速率。在STM32F103系列芯片中,最大速率可以设置为2MHz、10MHz或50MHz。
二、嵌入式C程序代码对内存(RAM)中的各变量的修改操作,与对外部设备(寄存器—>对应相关管脚)的操作的相同点和不同点:
相同点:
都需要使用C语言的基本数据类型,如int、char、float等。
都需要使用指针来访问内存地址或寄存器地址。
都需要使用特定的指令或函数来进行读写操作。
不同点:
对内存中的变量进行修改操作,可以直接使用C语言的基本运算符,如赋值运算符“=”、加减乘除运算符等。而对外部设备进行操作,需要使用特定的指令或函数,如读写寄存器的指令或函数。
对内存中的变量进行修改操作,不需要考虑硬件的细节,如寄存器的地址、寄存器的数据类型等。而对外部设备进行操作,需要考虑硬件的细节,如寄存器的地址、寄存器的数据类型、设备的接口类型等。
对内存中的变量进行修改操作,不会影响硬件的状态,如寄存器的值、管脚的电平等。而对外部设备进行操作,会影响硬件的状态,如寄存器的值、管脚的电平等。
对内存中的变量进行修改操作,不需要考虑并发访问的问题,因为内存是由CPU统一管理的。而对外部设备进行操作,需要考虑并发访问的问题,因为外部设备可能同时被多个程序或线程访问。
总之,对内存中的变量进行修改操作和对外部设备进行操作有很多相似之处,但也有很多不同之处。在编写嵌入式C程序时,需要根据具体的需求和硬件环境来选择合适的方法。
三、为什么51单片机的LED点灯编程要比STM32的简单?
51单片机和STM32虽然都是微控制器,但是它们的硬件架构、指令集、寄存器和外设等方面存在很大的差异,因此它们的编程方式也会有所不同。
在LED点灯编程方面,51单片机相对简单的原因可能有以下几点:
硬件结构简单:51单片机的硬件结构相对简单,只有少量的寄存器和外设,因此编程时需要考虑的因素较少,相对容易掌握。
指令集简单:51单片机的指令集相对较少,常用的指令也比较简单,因此编写LED点灯程序时使用的指令也比较简单,相对容易理解。
寄存器和外设易于使用:51单片机的寄存器和外设使用起来相对简单,不需要太多的配置和设置就可以使用,因此编写LED点灯程序时相对容易。
相比之下,STM32的硬件结构更加复杂,有大量的寄存器和外设,需要使用更复杂的指令集和编程方式。此外,STM32还需要进行更多的配置和设置才能使用其外设,因此编写LED点灯程序相对较难。