【STM32】 相关寄存器总结

简介: 我们通过了解GPIO口的工作方式以后,我们知道了数据可以通过配置成上下拉、模拟等等的配置,这些功能的配置都跟我们的GPIO的相关寄存器有关。那么我们就要了解GPIO的相关的寄存器。

前言

 我们通过了解GPIO口的工作方式以后,我们知道了数据可以通过配置成上下拉、模拟等等的配置,这些功能的配置都跟我们的GPIO的相关寄存器有关。那么我们就要了解GPIO的相关的寄存器。

GPIO的相关寄存器

  • 模式寄存器  GPIO_MODER
  • 输出类型寄存器  GPIO_OTYPER
  • 输出速度寄存器 GPIO_OSPEEDR
  • 上/下拉寄存器 GPIO_PUPDR
  • 输入数据寄存器 GPIO_IDR
  • 输出数据寄存器 GPIO_ODR
  • 置位/复位寄存器 GPIO_BSRR
  • 配置锁定寄存器 GPIO_LCKR
  • 复用功能低位寄存器 GPIO_AFRL
  • 复用功能高位寄存器 GPIO_AFRH

一、GPIO 端口模式寄存器 (GPIOx_MODER)

2345_image_file_copy_121.jpg

偏移地址:在固定地址上的偏移量,比如GPIOA_MODER的地址0x4002 0000;

复位值:某一个值,指的是这个寄存器里面的值是多少;

表格里面的rw(读写):表示是可以通过什么方式去访问这个寄存器.

2345_image_file_copy_122.jpg

这个我们要怎么理解呢?我们通过一个示例来理解:

比如:我们配置GPIOB的第三个引脚为输出模式:GPIOB_MODER=0x000 0000

2345_image_file_copy_123.jpg

把这个位配置成01,注意,我们配置这两个管脚的时候,其他的管脚是不能被改变的,那就是我们配置的时候,就直接配这两个管脚就可以了。

那我们可以改成如下:

GPIOB_MODER &=~(0x3<<6);

GPIOB_MODER |= (0x1<<6)

这个怎么理解呢?

我们可以假设:

xxxx  xxxx  xxxx  xxxx  xxxx  xxxx  xxxx  xxxx ,这个就是我们的GPIOB,

GPIOB_MODER &=~(0x3<<6);就是0x3左移6位然后在进行按位取反。

0000  0000 0000  0000 0000 0000 0000 0011,这个就是0x3,左移6位就成了

0000  0000 0000  0000 0000 0000 1100 0000. 然后这个值按位取反

1111  1111   1111  1111  1111 1111  0011  1111,这个就是我们按位取反得到的结果,再将这&上

xxxx  xxxx  xxxx  xxxx  xxxx  xxxx  xxxx  xxxx,得到

xxxx  xxxx  xxxx  xxxx  xxxx  xxxx  00xx  xxxx,这个值的结果就是赋给到我们的GPIOB.

GPIOB_MODER |= (0x1<<6)

这里我们根据上面的解释我们可以直接得出这样的运算:

xxxx  xxxx  xxxx  xxxx  xxxx  xxxx  xxxx  xxxx  --GPIOB

|(或)

0000 0000  0000 0000 0000 0000 0100 0000

=

xxxx  xxxx  xxxx xxxx  xxxx  xxxx 01xxx  xxxx.

得到这样的结果就是这句代码的解释。

小结:GPIOB_MODER &=~(0x3<<6)这个就是清空这个位

          GPIOB_MODER |= (0x1<<6)这个就是配置这个位

在这里可以补充一下,rw这种名词是官方已经定义好的了,我们只需要记住就可以了,不需要深究:

2345_image_file_copy_124.jpg

二、GPIO 端口输出类型寄存器 (GPIOx_OTYPER)

2345_image_file_copy_125.jpg

位 31:16 保留,必须保持复位值。

位 15:0 OTy[1:0]:端口 x 配置位 (Port x configuration bits) (y = 0..15)

这些位通过软件写入,用于配置 I/O 端口的输出类型。

0:输出推挽(复位状态)

1:输出开漏

三、GPIO 端口输出速度寄存器 (GPIOx_OSPEEDR)

这里说明STM32是一款低功耗的芯片,GPIO口速度越快,功耗越高。

2345_image_file_copy_126.jpg

位 2y:2y+1 OSPEEDRy[1:0]:端口 x 配置位 (Port x configuration bits) (y = 0..15)

这些位通过软件写入,用于配置 I/O 输出速度。

00:2 MHz(低速)

01:25 MHz(中速)

10:50 MHz(快速)

11:30 pF 时为 100 MHz(高速)(15 pF 时为 80 MHz 输出(最大速度))

四、GPIO 端口上拉/下拉寄存器 (GPIOx_PUPDR)

2345_image_file_copy_127.jpg

PUPDRy[1:0]:端口 x 配置位 (Port x configuration bits) (y = 0..15)

这些位通过软件写入,用于配置 I/O 上拉或下拉。

00:无上拉或下拉(浮空)

01:上拉

10:下拉

11:保留(没有这种写法,所以保留)

五、 GPIO 端口输入数据寄存器 (GPIOx_IDR)

2345_image_file_copy_128.jpg 

位 31:16 保留,必须保持复位值。

位 15:0 IDRy[15:0]:端口输入数据 (Port input data) (y = 0..15)

这些位为只读形式,只能在只读模式下访问。它们包含相应 I/O 端口的输入值。当前IO口的状态结果。

六、GPIO 端口输出数据寄存器(GPIOx_ODR)

2345_image_file_copy_129.jpg

位 31:16 保留,必须保持复位值。

位 15:0 ODRy[15:0]:端口输出数据 (Port output data) (y = 0..15)

这些位可通过软件读取和写入。想要IO输入高还是低电平,只要通过寄存器写0/1就可以了。

七、GPIO 端口置位/复位寄存器 (GPIOx_BSRR)

2345_image_file_copy_130.jpg 

开头的字母不同,说明功能会有所不一样。

位 31:16 BRy:端口 x 复位位 y (Port x reset bit y) (y = 0..15)

这些位为只写形式,只能在字、半字或字节模式下访问。读取这些位可返回值 0x0000。

0:不会对相应的 ODRx 位执行任何操作

1:对相应的 ODRx 位进行复位

注意:如果同时对 BSx 和 BRx 置位,则 BSx 的优先级更高。

位 15:0 BSy:端口 x 置位位 y (Port x set bit y) (y= 0..15)

这些位为只写形式,只能在字、半字或字节模式下访问。读取这些位可返回值 0x0000。

0:不会对相应的 ODRx 位执行任何操作

1:对相应的 ODRx 位进行置位

八、GPIO 端口配置锁定寄存器 (GPIOx_LCKR)

2345_image_file_copy_131.jpg

位 31:17 保留,必须保持复位值。

位 16 LCKK[16]:锁定键 (Lock key)

可随时读取此位。可使用锁定键写序列对其进行修改。

0:端口配置锁定键未激活。

1:端口配置锁定键已激活。直到 MCU 复位时,才锁定 GPIOx_LCKR 寄存器。

锁定键写序列:

WR LCKR[16] = ‘1’ + LCKR[15:0]

WR LCKR[16] = ‘0’ + LCKR[15:0]

WR LCKR[16] = ‘1’ + LCKR[15:0]

RD LCKR

RD LCKR[16] = ‘1’(此读操作为可选操作,但它可确认锁定已激活)

注意:在锁定键写序列期间,不能更改 LCK[15:0] 的值。

锁定序列中的任何错误都将中止锁定操作。

在任一端口位上的第一个锁定序列之后,对 LCKK 位的任何读访问都将返回“1”,直

到下一次 CPU 复位为止。

位 15:0 LCKy:端口 x 锁定位 y (Port x lock bit y) (y= 0..15)

这些位都是读/写位,但只能在 LCKK 位等于“0”时执行写操作。

0:端口配置未锁定

1:端口配置已锁定

九、GPIO 复用功能低位寄存器 (GPIOx_AFRL)

2345_image_file_copy_132.jpg

位 31:0 AFRLy:端口 x 位 y 的复用功能选择 (Alternate function selection for port x bit y) (y = 0..7)

这些位通过软件写入,用于配置复用功能 I/O。

AFRLy 选择:

0000:AF0

0001:AF1

0010:AF2

0011:AF3

0100:AF4

0101:AF5

0110:AF6

0111:AF7

1000:AF8

1001:AF9

1010:AF10

1011:AF11

1100:AF12

1101:AF13

1110:AF14

1111:AF15

十、GPIO 复用功能高位寄存器 (GPIOx_AFRH)

2345_image_file_copy_133.jpg

位 31:0 AFRHy:端口 x 位 y 的复用功能选择 (Alternate function selection for port x bit y) (y = 8.0.15)

这些位通过软件写入,用于配置复用功能 I/O。

AFRHy 选择:

0000:AF0

0001:AF1

0010:AF2

0011:AF3

0100:AF4

0101:AF5

0110:AF6

0111:AF7

1000:AF8

1001:AF9

1010:AF10

1011:AF11

1100:AF12

1101:AF13

1110:AF14

1111:AF15



相关文章
|
7月前
|
C语言 芯片 内存技术
STM32F103标准外设库——寄存器 (二)
STM32F103标准外设库——寄存器 (二)
277 1
STM32F103标准外设库——寄存器 (二)
|
5月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
803 0
|
4月前
|
开发框架 C语言 开发者
STM32寄存器操作、模板构建
【8月更文挑战第23天】本文档介绍STM32中的寄存器操作方法与模板构建技巧。寄存器是STM32控制内外设的核心,通过直接读写特定内存地址来进行操作。以配置GPIO为例,需定位寄存器地址并写入适当值。文档还提供了一个基本的代码模板,包括包含头文件、时钟配置、外设初始化及主函数流程,帮助开发者快速搭建开发框架,并强调了参考手册的重要性以确保正确使用。
|
5月前
stm32f407探索者开发板(九)——寄存器地址名称映射
stm32f407探索者开发板(九)——寄存器地址名称映射
|
6月前
|
移动开发
技术好文:stm32寄存器版学习笔记06输入捕获(ETR脉冲计数)
技术好文:stm32寄存器版学习笔记06输入捕获(ETR脉冲计数)
298 0
|
6月前
经验大分享:STM32F4寄存器初始化系列:GPIO
经验大分享:STM32F4寄存器初始化系列:GPIO
35 0
|
传感器 存储 人工智能
STM32第一章-寄存器你懂吗?
嵌入式系统是小型计算机的一个分支系统。平常用的PC,就属于功能比较专一的计算机,从核心的处理器来说,可以分成嵌入式微处理器和嵌入式微控制器,我们传统意义上的那种单片机,比如说像51、AVR还有按里面比较低配的一些,比如说像Cortex-M系列的这一类,我们都把它划分为微控制器,微处理器呢,就相对来说处理能力,运算能力要强一些,比如ARM9以上的系列和 Cortex-A以及以上系列。STM32属于一个微控制器,请大家牢牢记住微控制器这四个字。STM32自带了各种常用通信接口,比如USART、I2C、SPI等,可接非常多的传感器,可以控制很多的设备。现实生活中,我们接触到的很多电器产品都有STM3
629 0
 STM32第一章-寄存器你懂吗?
STM32_NVIC寄存器详解
STM32_NVIC寄存器详解
337 0
STM32使用寄存器通过控制GPIO点亮一盏灯
STM32使用寄存器通过控制GPIO点亮一盏灯
109 0
STM32使用寄存器通过控制GPIO点亮一盏灯
|
芯片 iOS开发
STM32 | GPIO口的普通与复用如何配置与用法,本文降从最底层教你如何查看手册运用寄存器来实现GPIO口的配置
STM32 | GPIO口的普通与复用如何配置与用法,本文降从最底层教你如何查看手册运用寄存器来实现GPIO口的配置
1304 0