当我们配置推挽输出、开漏输出、上拉、下拉时,我们在配置什么?

在STM32的引脚配置中,我们经常看到:推挽输出,开漏输出,上拉,下拉,浮空等术语,这些都是什么意思?应用场合有何不同?本文将尝试解答这些问题。

1 STM32的GPIO结构

STM32的IO模式一般有这4种:输入,输出,复用,模拟。前面两种作为通用IO使用,也是本文的主要讨论对象,复用功能可以借鉴通用IO的配置,模拟功能比较特殊,没有上下拉、推挽开漏之说,具体配置参照对应的手册说明即可,不在本文的讨论范围。

下图是STM32的3V/5V兼容引脚的GPIO结构图,可以看到模拟Analog和数字Digital分开,数字又可分为输入输出,输入由一个施密特触发器和一对可配置的上下拉电阻组成,输出由共漏极的PMOS和NMOS,和一对可配置的上下拉电阻组成(输入和输出共用一对上下拉电阻)。
当我们配置推挽输出、开漏输出、上拉、下拉时,我们在配置什么?_第1张图片

2 输入配置

输入只有上下拉电阻的配置,共有3种配置:上拉输入,下拉输入,浮空输入(既不上拉,也不下拉)。

2.1 上拉输入

当外部输入在有效时为低电平,无效时电平不确定,一般使用上拉电阻来使输入无效时的电平处于确定的状态。下图中的按键输入就是一个例子,当按键闭合时,施密特触发器的输入是低电平,当按键断开时,施密特触发器的输入是未知的,这时需要接一个上拉电阻使按键断开的输入处于确定的状态(高电平),这个上拉电阻可以是外部的,也可以是单片机内部的。
当我们配置推挽输出、开漏输出、上拉、下拉时,我们在配置什么?_第2张图片

2.2 下拉输入

与上拉输入相反,当外部输入在有效时为高电平,无效时电平不确定,一般使用下拉电阻来使输入无效时电平处于确定的状态。如下图所示。
当我们配置推挽输出、开漏输出、上拉、下拉时,我们在配置什么?_第3张图片

2.3 浮空输入

当外部输入不管是有效还是无效,电平都处于确定的状态时(比如推挽输出,详见下文),则可以使用浮空输入,也就是没有上下拉电阻的输入。

3 输出配置

输出主要有两种:推挽输出,开漏输出, 开漏输出一般搭配上拉电阻使用。

3.1 推挽输出

如下图所示,推挽输出(push-pull)由栅极、漏极分别相连的一对MOS管组成,当输入IN为低电平时,PMOS打开,NMOS关闭,输出OUT连接到VDD;反之,当输入IN为高电平时,NMOS打开,PMOS关闭,输出OUT连接到VSS。因此推挽输出的电平都是确定的,一般不需要接上下拉电阻。推挽输出常用于UART和SPI等单向通信接口(通信线路上信号只往一个方向走)。
当我们配置推挽输出、开漏输出、上拉、下拉时,我们在配置什么?_第4张图片

3.2 开漏输出

如下图所示,开漏输出(open-drain)电路只有一个NMOS,当输入IN为高电平时,NMOS打开,输出OUT连接到VSS,当输入IN为低电平时,NMOS关闭,输出OUT处于浮空状态,输出电平不确定。
当我们配置推挽输出、开漏输出、上拉、下拉时,我们在配置什么?_第5张图片
一般开漏输出会接上拉电阻,这个电阻可以是单片机内部的,也可以是外接的,下图中的为单片机内部上拉。这样,当输入IN为低电平时,NMOS关闭,由于接了上拉电阻,输出OUT为高电平。开漏输出常用于I2C等双向通信接口(通信线路上的信号可以往两个方向走),以I2C为例,总线接上拉电阻,总线上的设备在默认情况下都没有输出,总线处于高电平状态,一旦有任一个设备输出低电平,整个总线都被拉低,其它设备都可以读到这个低电平。
当我们配置推挽输出、开漏输出、上拉、下拉时,我们在配置什么?_第6张图片

参考:

  • AN4899
  • Open Drain Output vs. Push-Pull Output


2020/12/20   晴   SZ

你可能感兴趣的:(推挽输出,开漏输出,STM32,GPIO)