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. AFR0-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位设置的高电平。

相关推荐
youcans_1 小时前
【STM32C5教程】(3)GPIO 按键输入实验
stm32·单片机·嵌入式硬件
俊基科技2 小时前
回音消不掉、底噪压不住、主板还对不上口?——A-59P 多功能语音处理模组技术解析
嵌入式硬件·回音消除·ai降噪模块
北京盛世宏博3 小时前
通信异常深度排查:以太网温湿度设备 TCP 粘包、UDP 丢包根治方案
单片机·网络协议·tcp/ip·udp·以太网·传感器·温湿度
蓝天居士4 小时前
PY32F系列MCU在串口接收时跑飞的根因分析(2)
单片机·嵌入式硬件
wuyk5557 小时前
嵌入式驱动开发:量产级工程化实战(第9篇)——低功耗下的通信可靠性
c语言·驱动开发·stm32·单片机·嵌入式硬件
创界工坊工作室7 小时前
24-基于单片机的仓鼠养殖环境监控系统设计
stm32·单片机·嵌入式硬件·proteus
碧海银沙音频科技研究院8 小时前
基于炬芯ATS录音卡BLE控制协议
人工智能·嵌入式硬件·算法·语音识别
comyccccc9 小时前
PCB走线设计秘籍:从载流到3D预览全解析学习笔记
单片机·嵌入式硬件
俊基科技9 小时前
A-59 工业级 AI 语音处理模组:100 dB 消回音 + 神经网络降噪的工程实践
嵌入式硬件·神经网络·硬件开发·语音模块·回音消除·拾音降噪
endeavor129 小时前
can总线(五)
c语言·stm32·单片机·can