GPIO的寄存器以及ODR和BSRR的区别

一、GPIO的寄存器

1. MODER (模式寄存器)

MODER 寄存器控制每个引脚的工作模式。每两个连续的位配置一个引脚的模式。支持的模式包括输入、输出、复用功能、模拟模式。

2. OTYPER (输出类型寄存器)

OTYPER 寄存器控制引脚的输出类型。每个位对应一个引脚的输出类型。可以选择推挽输出(标准输出)或开漏输出(适用于需要外部上拉电阻的场景)。

3. OSPEEDR (输出速度寄存器)

OSPEEDR 寄存器用于配置引脚的输出速度。每两个连续的位配置一个引脚的输出速度,支持低、中、高、极高速选项。

4. PUPDR (上拉/下拉寄存器)

PUPDR 寄存器控制每个引脚的上拉或下拉电阻。每两个连续的位配置一个引脚的上拉或下拉电阻,支持没有电阻、上拉电阻、下拉电阻。

5. IDR (输入数据寄存器)

IDR 寄存器用于读取引脚的输入状态,返回每个引脚的电平状态(高或低)。

6. ODR (输出数据寄存器)

ODR 寄存器用于设置或读取引脚的输出状态。每一位对应一个引脚的输出电平,可以设置为高电平(1)或低电平(0)。

7. BSRR (位设置/复位寄存器)

BSRR 寄存器用于原子地设置或复位引脚的电平。低16位设置引脚为高电平(置1),高16位设置引脚为低电平(置1),此操作是原子性的,不会影响其他引脚。

8. LCKR (锁定寄存器)

LCKR 寄存器用于锁定引脚配置。这是一个16位寄存器,可以防止对特定引脚配置的进一步修改,通常用于保护配置。

9. AFR[0-1] (复用功能寄存器)

AFR[0]AFR[1] 寄存器用于配置引脚的复用功能,选择与外设连接的特定功能(如 UART、SPI、I2C 等)。每个引脚的复用功能通过这两个寄存器中的相应位进行配置。

二、ODR和BSRR的区别

1. ODR 寄存器(Output Data Register)

ODR 寄存器是一个16位寄存器,用于读取或设置 GPIO 引脚的输出状态。

  • 功能:

    • ODR 的每一位对应一个引脚的状态。
    • 通过设置 ODR 寄存器中的位为 1,可以将对应引脚设置为 高电平(1)。
    • 通过设置 ODR 寄存器中的位为 0,可以将对应引脚设置为 低电平(0)。
  • 特点:

    • 批量操作:可以通过一次操作修改多个引脚的状态,适合需要同时改变多个引脚的场景。
    • 可能影响其他引脚 :如果修改了 ODR 寄存器中的某一位,可能会意外影响其他位的状态。
    • 不原子 :在修改多个引脚时,可能会遇到状态的不一致,尤其是在中断或者多线程环境下。即,修改 ODR 时如果涉及多个引脚,有可能在更新过程中,某些引脚状态处于不一致的中间状态。

高低电平的设置:

2. BSRR 寄存器(Bit Set/Reset Register)

BSRR 寄存器也是一个32位寄存器,用于设置和重置 GPIO 引脚的电平状态。

  • 功能:

    • 低16位 :用于 设置引脚为高电平,将对应的引脚置为 1。
    • 高16位 :用于 设置引脚为低电平,将对应的引脚置为 0。
  • 特点:

    • 原子操作 :每次对 BSRR 的写入会立即生效,并且不会影响其他引脚的状态,操作是独立且原子的。
    • 不会影响其他引脚 :与 ODR 不同,BSRR 允许你精确控制某一引脚的电平状态,不会修改其它引脚的状态。
    • 适用于需要精确控制的场景 :尤其在多任务或中断环境下,使用 BSRR 可以避免因批量操作引发的不一致问题。

高低电平的设置:

三、BSRR优势

BSRR优点体现:(同时写入PIN3,PIN4不会互相影响高低电平,原因是如果你想把某一位置为低电平你需要在对应的高十六位置1,如下图):

这样才能把PIN3置为低电平。这样有个疑问了,这里的BSRR的高十六位的第4位和低十六位的第四位都是1,不就高低电平冲突了吗?

实际情况是, 写高16位时会优先执行复位(低电平)操作,从而清除任何由低16位设置的高电平。

相关推荐
云伴枫轻舞4 分钟前
我对 OTA 的理解随记,附GD32/STM32例程
stm32·单片机·嵌入式硬件
Aczone2844 分钟前
硬件(五) 存储、ARM 架构与指令系统
arm开发·嵌入式硬件·架构
LS·Cui1 小时前
单片机按键示例功能
单片机
【ql君】qlexcel1 小时前
MCU上电到运行的全过程
单片机·嵌入式硬件·mcu·启动过程
搞一搞汽车电子2 小时前
S32K3平台eMIOS 应用说明
开发语言·驱动开发·笔记·单片机·嵌入式硬件·汽车
pQAQqa2 小时前
FreeRTOS项目(2)摇杆按键检测
stm32·单片机·嵌入式硬件·freertos
小莞尔3 小时前
【51单片机】【protues仿真】基于51单片机停车场的车位管理系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
一川月白7094 小时前
51单片机---硬件学习(跑马灯、数码管、外部中断、按键、蜂鸣器)
单片机·学习·51单片机·外部中断·蜂鸣器·数码管·跑马灯
月阳羊5 小时前
【硬件-笔试面试题-69】硬件/电子工程师,笔试面试题(知识点:电机驱动电路的反馈电路)
java·经验分享·嵌入式硬件·面试
weixin_468466857 小时前
树莓派32位与64位系统安装teamviewer远程软件
linux·单片机·自动化·树莓派·远程控制·vnc·teamviewer