• 【STM32】 相关寄存器总结


    前言

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

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

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

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

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

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

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

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

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

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


    前言

      我们通过了解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) 

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

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

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

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

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

    把这个位配置成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这种名词是官方已经定义好的了,我们只需要记住就可以了,不需要深究:

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

    位 31:16 保留,必须保持复位值。
    位 15:0 OTy[1:0]:端口 x 配置位 (Port x configuration bits) (y = 0..15)
    这些位通过软件写入,用于配置 I/O 端口的输出类型。
    0:输出推挽(复位状态)
    1:输出开漏

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

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

    位 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)

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

    这些位通过软件写入,用于配置 I/O 上拉或下拉。
    00:无上拉或下拉(浮空)
    01:上拉
    10:下拉
    11:保留(没有这种写法,所以保留)

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

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

    位 15:0 IDRy[15:0]:端口输入数据 (Port input data) (y = 0..15)
    这些位为只读形式,只能在只读模式下访问。它们包含相应 I/O 端口的输入值。当前IO口的状态结果。

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

    位 31:16 保留,必须保持复位值。
    位 15:0 ODRy[15:0]:端口输出数据 (Port output data) (y = 0..15)
    这些位可通过软件读取和写入。想要IO输入高还是低电平,只要通过寄存器写0/1就可以了。

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

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

    位 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)

    位 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) 

     

    位 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)  

     位 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
  • 相关阅读:
    ChatGPT第八讲
    MiniCPM 多模态VLM图像视频理解代码案例
    CMake 将所有 Target 的工程在 Visual Studio 中加到同一个文件夹
    智能家居的实用性设置有哪些?智汀小米的怎么样?
    无胁科技-TVD每日漏洞情报-2022-8-22
    利用exec命令进入docker容器时的报错问题
    日志开源组件(六)Adaptive Sampling 自适应采样
    _locate_stream(Workbook): seen 报错处理
    Python 入门
    擎创技术流 | ClickHouse实用工具—ckman教程(4)
  • 原文地址:https://blog.csdn.net/Lushengshi/article/details/126213405