5.什么是寄存器¶

5.什么是寄存器¶

5.5.1.3. 外设寄存器¶

在XX外设的地址范围内,分布着的就是该外设的寄存器。以GPIO外设为例,GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚,基本功能是控制引脚输出高电平或者低电平。最简单的应用就是把GPIO的引脚连接到LED灯的阴极,LED灯的阳极接电源,然后通过STM32控制该引脚的电平,从而实现控制LED灯的亮灭。

GPIO有很多个寄存器,每一个都有特定的功能。每个寄存器为32bit,占四个字节,在该外设的基地址上按照顺序排列,寄存器的位置都以相对该外设基地址的偏移地址来描述。这里我们以GPIOB端口为例,来说明GPIO都有哪些寄存器,具体见表格

5‑7。

表格 5‑7 GPIOB端口的 寄存器地址列表

寄存器名称

寄存器地址

相对GPIOB基址的偏移

GPIOB_CRL

0x4001 0C00

0x00

GPIOB_CRH

0x4001 0C04

0x04

GPIOB_IDR

0x4001 0C08

0x08

GPIOB_ODR

0x4001 0C0C

0x0C

GPIOH_BSRR

0x4001 0C10

0x10

GPIOH_BRR

0x4001 0C14

0x14

GPIOH_LCKR

0x4001 0C18

0x18

有关外设的寄存器说明可参考《STM32F10xx参考手册》中具体章节的寄存器描述部分,在编程的时候我们需要反复的查阅外设的寄存器说明。

这里我们以“GPIO端口置位/复位寄存器”为例,教大家如何理解寄存器的说明,具体见图

5‑6。

图 5‑6 GPIO端口置位/复位寄存器说明

①名称

寄存器说明中首先列出了该寄存器中的名称,“(GPIOx_BSRR)(x=A…E)”这段的意思是该寄存器名为“GPIOx_BSRR”其中的“x”可以为A-E,也就是说这个寄存器说明适用于GPIOA、GPIOB至GPIOE,这些GPIO端口都有这样的一个寄存器。

②偏移地址

偏移地址是指本寄存器相对于这个外设的基地址的偏移。本寄存器的偏移地址是0x10,从参考手册中我们可以查到GPIOA外设的基地址为0x4001

0800 ,我们就可以算出GPIOA的这个GPIOA_BSRR寄存器的地址为:0x4001

0800+0x10 ;同理,由于GPIOB的外设基地址为0x4001

0C00,可算出GPIOB_BSRR寄存器的地址为:0x4001 0C00+0x10

。其他GPIO端口以此类推即可。

③寄存器位表

紧接着的是本寄存器的位表,表中列出它的0-31位的名称及权限。表上方的数字为位编号,中间为位名称,最下方为读写权限,其中w表示只写,r表示只读,rw表示可读写。本寄存器中的位权限都是w,所以只能写,如果读本寄存器,是无法保证读取到它真正内容的。而有的寄存器位只读,一般是用于表示STM32外设的某种工作状态的,由STM32硬件自动更改,程序通过读取那些寄存器位来判断外设的工作状态。

④位功能说明

位功能是寄存器说明中最重要的部分,它详细介绍了寄存器每一个位的功能。例如本寄存器中有两种寄存器位,分别为BRy及BSy,其中的y数值可以是0-15,这里的0-15表示端口的引脚号,如BR0、BS0用于控制GPIOx的第0个引脚,若x表示GPIOA,那就是控制GPIOA的第0引脚,而BR1、BS1就是控制GPIOA第1个引脚。

其中BRy引脚的说明是“0:不会对相应的ODRy位执行任何操作;1:对相应ODRy位进行复位”。

这里的“复位”是将该位设置为0的意思,而“置位”表示将该位设置为1;说明中的ODRy是另一个寄存器的寄存器位,我们只需要知道ODRy位为1的时候,对应的引脚y输出高电平,

为0的时候对应的引脚输出低电平即可(感兴趣的读者可以查询该寄存器GPIOx_ODR的说明了解)。

所以,如果对BR0写入“1”的话,那么GPIOx的第0个引脚就会输出“低电平”,但是对BR0写入“0”的话,却不会影响ODR0位,所以引脚电平不会改变。

要想该引脚输出“高电平”,就需要对“BS0”位写入“1”,寄存器位BSy与BRy是相反的操作。

相关推荐

2025年十大最好看的有声小说 2025最火有声小说排行榜前十→MAIGOO生活榜
金立S10(全网通)

金立S10(全网通)

06-29 👁️ 8526
世界杯历史上仅有4队10次晋级8强,巴西领衔!
小猪短租:预订与入住流程全解析
电镐常见问题故障及解决方法www.nenztool.com
24位博士毕业生晒出薪资待遇,博士真实收入如何?
洛克王国掌上洛克挂机什么意思(掌上洛克如何1秒2000经验?)
虞山镇属于常熟哪个区?
c语言如何创建指针数组

c语言如何创建指针数组

07-04 👁️ 5496