STM32的GPIO片上外设
一、STM32的片上外设
片上外设是集成在 MCU 芯片内部的硬件模块,它们通过片内总线与 CPU 直接通信,而不是通过外部引脚或接口连接的设备。
片上外设:
不是片上外设:
二、STM32中的GPIO
详细理解 STM32 的 GPIO(通用输入输出,General-Purpose Input/Output)。GPIO 是嵌入式系统中非常重要的一个模块,几乎所有的 MCU 都会有 GPIO 功能,因为它们负责与外部世界(传感器、按钮、LED 等)进行交互。
GPIO有3种状态,高电平状态、低电平状态、高组态(浮空态)
1. 什么是 GPIO?
GPIO 是 MCU 上的引脚,可以根据配置用来作为输入或者输出。每个 GPIO 引脚可以独立配置为:
这张图给出了一个I/O端口位的基本结构。
2、输入模式:
1. 输入模式下的电路工作
当 GPIO 引脚配置为 输入模式 时,输入数据来自外部设备(例如开关、传感器等),我们通过 MCU 的 GPIO 引脚读取外部信号的状态(高电平或低电平)。在这种模式下:
2. 输入模式的工作原理
当 GPIO 配置为 输入模式 时,引脚用于接收外部信号。这时,MCU 通过 GPIO 引脚读取外部设备的信号状态(高电平或低电平),这些信号可能来自按钮、传感器或其他输入设备。
3.输入模式下的工作流程:
-
外部信号进入 GPIO 引脚:
- 外部电路会给 GPIO 引脚施加电压,这个电压通常是 高电平 或 低电平。
- 例如,当你按下一个按钮,按钮会让引脚变为低电平;当按钮释放时,引脚通过上拉电阻保持高电平。
-
GPIO 读取引脚电平:
- GPIO 内部的 输入缓冲器 负责读取引脚上的电压状态,并将其传递给 输入寄存器(IDR)。
- MCU 程序可以通过读取输入数据寄存器(IDR)来获取引脚的当前状态(高或低)。
-
上拉/下拉电阻的作用:
- 在输入模式下,GPIO 引脚可以选择通过内部的上拉或下拉电阻来稳定信号:
- 上拉电阻:将引脚默认拉高到
V_DD
(高电平),适用于开关、按钮等场景。如果引脚悬空,输入会保持高电平。 - 下拉电阻:将引脚默认拉低到
V_SS
(低电平),适用于需要默认低电平的输入信号。
3、输出模式:
1、输出模式下的电路工作
当 GPIO 引脚配置为 输出模式 时,引脚用来向外部设备发送高电平或低电平信号(例如点亮 LED、驱动继电器等)。在这种模式下:
2. 输出模式的工作原理
当 GPIO 配置为 输出模式 时,GPIO 引脚用于向外部设备(如 LED、继电器等)发送高电平或低电平信号。
3.输出模式下的工作流程:
-
MCU 通过寄存器设置输出状态:
- MCU 程序通过设置 输出数据寄存器(ODR) 来控制引脚的电平状态。
- 当
ODR
设置为 1 时,引脚输出高电平(V_DD
)。 - 当
ODR
设置为 0 时,引脚输出低电平(V_SS
,地)。 -
GPIO 驱动电路的工作:
- 在 推挽输出模式 下:
- P-MOS 导通(N-MOS 关闭),引脚与
V_DD
相连,输出高电平。 - N-MOS 导通(P-MOS 关闭),引脚与
V_SS
相连,输出低电平。 - 在 开漏输出模式 下:
- N-MOS 控制引脚,N-MOS 导通时输出低电平;N-MOS 关闭时,引脚进入高阻态,无法主动输出高电平,需要外部上拉电阻将引脚拉高。
-
外部设备接收信号:
- 外部设备(如 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 驱动,而高电平依赖外部上拉电阻。
作者:@haihi