自学内容网 自学内容网

STM32的GPIO片上外设

一、STM32的片上外设

        片上外设是集成在 MCU 芯片内部的硬件模块,它们通过片内总线与 CPU 直接通信,而不是通过外部引脚或接口连接的设备。

片上外设:
  • 包括 UART、I2C、SPI、ADC、定时器、GPIO、DMA、RTC 等集成在 MCU 内部的模块。
  • 这些外设通过 MCU 内部的总线系统与 CPU 核心连接,并不需要外部连接
不是片上外设:
  • 外部传感器、存储器、显示设备、通信模块、电机驱动器等。这些外设通过 I2C、SPI、UART、GPIO 等接口与 MCU 连接,并不属于 MCU 芯片的一部分。

二、STM32中的GPIO

        详细理解 STM32 的 GPIO(通用输入输出,General-Purpose Input/Output)。GPIO 是嵌入式系统中非常重要的一个模块,几乎所有的 MCU 都会有 GPIO 功能,因为它们负责与外部世界(传感器、按钮、LED 等)进行交互。

        GPIO有3种状态,高电平状态、低电平状态、高组态(浮空态)

1. 什么是 GPIO?

GPIO 是 MCU 上的引脚,可以根据配置用来作为输入或者输出。每个 GPIO 引脚可以独立配置为:

  • 输入:读取外部设备的状态(如按钮、传感器信号)。
  • 输出:向外部设备提供电平信号(如控制 LED、继电器)。
  • 复用功能:有时 GPIO 引脚会被用来复用片上外设(如 UART、SPI、I2C 等)功能。
  • 模拟功能:GPIO 引脚也可以作为模拟输入,用于 ADC(模数转换)等操作。

 这张图给出了一个I/O端口位的基本结构。

2、输入模式:
1. 输入模式下的电路工作

当 GPIO 引脚配置为 输入模式 时,输入数据来自外部设备(例如开关、传感器等),我们通过 MCU 的 GPIO 引脚读取外部信号的状态(高电平或低电平)。在这种模式下:

  • 主要工作部分:输入路径(即图中上半部分)。
    • 上半部分电路中的输入缓冲器、电平转换器和上拉/下拉电阻等相关电路在输入模式下起作用,负责检测并处理外部信号。
    • 这些电路会根据外部信号的电压(高或低),通过输入寄存器(IDR)将信号传送到 MCU 内部。
  • 下半部分的输出电路不会起作用:当引脚处于输入模式时,下半部分的 P-MOS 和 N-MOS 输出控制电路被禁用。换句话说,在输入模式下,输出控制电路与输入信号无关,不影响输入电路的工作
2. 输入模式的工作原理

当 GPIO 配置为 输入模式 时,引脚用于接收外部信号。这时,MCU 通过 GPIO 引脚读取外部设备的信号状态(高电平或低电平),这些信号可能来自按钮、传感器或其他输入设备。

3.输入模式下的工作流程
  1. 外部信号进入 GPIO 引脚

    • 外部电路会给 GPIO 引脚施加电压,这个电压通常是 高电平低电平
    • 例如,当你按下一个按钮,按钮会让引脚变为低电平;当按钮释放时,引脚通过上拉电阻保持高电平。
  2. GPIO 读取引脚电平

    • GPIO 内部的 输入缓冲器 负责读取引脚上的电压状态,并将其传递给 输入寄存器(IDR)
    • MCU 程序可以通过读取输入数据寄存器(IDR)来获取引脚的当前状态(高或低)。
  3. 上拉/下拉电阻的作用

    • 在输入模式下,GPIO 引脚可以选择通过内部的上拉或下拉电阻来稳定信号:
      • 上拉电阻:将引脚默认拉高到 V_DD(高电平),适用于开关、按钮等场景。如果引脚悬空,输入会保持高电平。
      • 下拉电阻:将引脚默认拉低到 V_SS(低电平),适用于需要默认低电平的输入信号。
3、输出模式:
1、输出模式下的电路工作

当 GPIO 引脚配置为 输出模式 时,引脚用来向外部设备发送高电平或低电平信号(例如点亮 LED、驱动继电器等)。在这种模式下:

  • 主要工作部分:输出路径(即图中下半部分)。
    • 下半部分电路中的 P-MOS 和 N-MOS 控制晶体管在输出模式下工作,用于控制引脚的电平(高电平或低电平)。
    • 具体来说,在推挽输出模式下,P-MOS 和 N-MOS 会根据 GPIO 输出寄存器(ODR)的设置,交替导通或关闭,从而驱动引脚输出高电平或低电平。
  • 上半部分的输入电路不会起作用:当引脚处于输出模式时,上半部分的输入电路被禁用。这意味着 TTL 触发器和输入相关的电路不会影响输出信号
 
2. 输出模式的工作原理

当 GPIO 配置为 输出模式 时,GPIO 引脚用于向外部设备(如 LED、继电器等)发送高电平或低电平信号。

3.输出模式下的工作流程
  1. MCU 通过寄存器设置输出状态

    • MCU 程序通过设置 输出数据寄存器(ODR) 来控制引脚的电平状态。
      • ODR 设置为 1 时,引脚输出高电平(V_DD)。
      • ODR 设置为 0 时,引脚输出低电平(V_SS,地)。
  2. GPIO 驱动电路的工作

    • 推挽输出模式 下:
      • P-MOS 导通(N-MOS 关闭),引脚与 V_DD 相连,输出高电平。
      • N-MOS 导通(P-MOS 关闭),引脚与 V_SS 相连,输出低电平。
    • 开漏输出模式 下:
      • N-MOS 控制引脚,N-MOS 导通时输出低电平;N-MOS 关闭时,引脚进入高阻态,无法主动输出高电平,需要外部上拉电阻将引脚拉高。
  3. 外部设备接收信号

    • 外部设备(如 LED、继电器等)通过 GPIO 引脚接收电平信号,并做出响应。
      • 例如,输出高电平时 LED 会点亮,输出低电平时 LED 会熄灭。

1. 输入部分

  • 输入浮空模式

    • 在浮空输入模式下,输入引脚没有上拉或下拉电阻。此时,图中的输入路径是打开的(“输入驱动器”工作),但由于没有内部电阻,电平是不确定的,依赖于外部电路施加的电压。引脚处于高阻状态,电压漂浮,容易受到噪声影响。
  • 输入上拉模式

    • 这时引脚通过图中显示的内部上拉电阻(位于 I/O 引脚右侧)拉到高电平。即使外部没有施加电压,内部上拉电阻将引脚拉高,输入电平会默认变为逻辑高电平(V_DD)。当外部电压拉低时,电平变为低。
  • 输入下拉模式

    • 类似于上拉模式,但这时内部电路中启用了下拉电阻。图中未明确展示下拉电阻,但在 STM32 的实现中,引脚通过下拉电阻连接到地 (V_SS),此时引脚默认电平是逻辑低电平。外部电压施加高电平时,可以改变引脚状态。
  • 模拟输入模式

    • 模拟输入模式主要用于 ADC(模拟数字转换),输入电压通过图中的输入路径直接传输到 ADC 模块。此时,输入电路不再工作为数字电平检测,而是作为模拟信号的采样通道。

2. 输出部分

  • 推挽输出模式

    • 在推挽模式下,P-MOS 和 N-MOS 开关交替工作。
      • 高电平:当 P-MOS 导通(如图中显示的 P-MOS 控制线路通向 V_DD),引脚被直接连接到高电平(V_DD),引脚输出逻辑 1。
      • 低电平:当 N-MOS 导通,引脚被连接到低电平(V_SS),输出逻辑 0。
    • 这就是所谓的“推”和“挽”——推电流到引脚(高电平),或将引脚拉到地(低电平),适用于大部分输出场景,如控制 LED、电机等。
  • 开漏输出模式

    • 在开漏模式下,只有 N-MOS 开关工作(P-MOS 不工作)。
      • 低电平:N-MOS 导通时,引脚连接到地,输出低电平(逻辑 0)。
      • 高阻态(浮空):当 N-MOS 关闭时,引脚被断开(高阻状态),不主动输出高电平。此时,若外部有上拉电阻(如图中的外部上拉电阻),引脚会通过外部电路被拉到高电平。
    • 这种模式常用于像 I2C 这种总线协议,多个设备共享一条信号线。设备只负责拉低信号,而高电平由外部上拉电阻提供。
  • 推挽复用输出
    • 当 GPIO 被配置为某个外设(如 UART),复用功能控制引脚的电平,推挽模式仍然有效。引脚可以在外设的控制下输出高电平或低电平。
  • 开漏复用输出
    • 这个模式常用于像 I2C 通信协议。外设控制引脚的开漏输出,在这种模式下,引脚输出低电平由 N-MOS 驱动,而高电平依赖外部上拉电阻。

原文地址:https://blog.csdn.net/2301_78622258/article/details/142927107

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!