GPIO输出输入的简单原理
-
输出:通过
寄存器
写0
或者是1
,控制引脚输出低电压
或者是高电压
。 -
输入:通过读取引脚的
寄存器
是0
还是1
,判断是高电压
还是低电压
。
GPIO的四种输出模式
推挽与开漏
推挽输出
推挽输出是GPIO(通用输入输出)的一种输出配置,能够驱动电平高或低。
实现原理:STM32中的推挽输出配置由一个PMOS和一个NMOS组成:
-
PMOS:连接到VDD,导通时输出高电平。
-
NMOS:连接到GND,导通时输出低电平。
应用:用于需要驱动电流的场合,如驱动LED、继电器等。
开漏输出
开漏输出仅能拉低电平,不能主动拉高,需要通过外部上拉电阻将电平拉高到逻辑高
实现原理:开漏配置只有一个NMOS连接到GND:
-
当NMOS导通时,输出低电平。
-
需要外部上拉电阻将电平拉高。
应用:适合I2C总线等需要多个设备连接的场合。
复用推挽与复用开漏
通用模式,是由CPU通过寄存器输出控制IO的高低电压。但实际开发功能需求中许多功能是需要一个源源不断的信号作为通信、工作的基础,那么直接通过CPU模拟工作就显得不足。
故此,引入了复用模式,如图所见,直接将控制权交给片上外设,由他们直接来输出信号。
采用复用模式通过硬件外设实现功能,效率高,不容易出错。避免了CPU模拟持续监控和控制引脚的缺点。在时序精度和稳定性上表现的都更加的出色。
而且硬件外设可以处理复杂协议,如I2C,SPI,UART等,而软件模拟实现复杂协议较为困难。且硬件外设通常设计为低功耗,而软件模拟需要CPU持续工作,功耗更高。
复用推挽
电平输出:
-
高电平时:PMOS导通,输出VDD。
-
低电平时:NMOS导通,输出GND。
特性:
-
能源驱动:允许双向电流流动,适合高驱动应用。
-
输出速度快,适合需要快速切换的信号。
复用开漏
电平输出:
-
低电平时:NMOS导通,连接GND。
-
高电平时:NMOS关断,依靠外部上拉电阻提供高电平。
特性:
-
线与功能:多个设备可连接同一条线上,实现多设备通信(如I2C)。
-
对外部干扰敏感度低。
GPIO的四种输入模式
输入上拉和输入下拉
如图所示,输入上拉即Vdd接通通过上拉电阻,因为施密特触发器输入阻抗无穷大,可等效为一个无穷大电阻,输入上拉和输入下拉是指当引脚处于浮空状态时,通过上拉电阻和下拉电阻来 确定电压,避免外界噪声干扰。
输入浮空
顾名思义,即不采用上拉电阻,也不采用下拉电阻,这时候易受到外界噪声干扰,产生浮动。
模拟输入
我们有时候需要用AD采集到IO口上面的真实电压。这就有了我们所需要的模拟输入。为了让外部的电压真实的读取到单片机的AD模块,我们既不能闭合上拉和下拉的开关,也不能让信号经过施密特触发器进行滤波。