原文
https://embeddedartistry.com/blog/2018/06/04/demystifying-microcontroller-gpio-settings/
为微控制器编写软件的任何人都必须配置和管理GPIO(通用输入/输出)引脚。从表面上看,GPIO配置看起来很简单:引脚是输入或输出,并且可以为高或低。
但是,不可避免地,您会遇到带有众多配置选项的高档处理器,或者电气工程师会要求您做某种您不了解的引脚设置(比如,使这条线为Hi-Z)。
本指南旨在帮助您了解现代微控制器上提供的不同引脚配置选项。
在深入探讨配置选项之前,了解一些与GPIO和IO信号相关的一般描述和术语会很有用。
三态逻辑
大多数现代GPIO线都实现为三态缓冲器。这意味着GPIO线可以有效地采用三个值:
- 逻辑0(接地)
- 逻辑1(连接到VCC)
- 高阻抗(也称为“浮动/悬空”,“ Hi-Z”,“三态”)
高阻抗
当线路处于高阻抗状态时,输出将从电路中有效移除。这允许多个电路或设备共享相同的输出线,并且通常用于实现通信总线。必要时未能利用高阻抗状态会导致IO争用和短路。
浮动/悬空
当信号的状态不确定时,则称该信号为“浮动”,这意味着该信号既未连接至VCC也不接地。信号的电压将“浮动”以匹配残余电压。
术语“浮动”通常 可以同 高阻抗状态 互换使用。
上拉
上拉电阻是将信号连接到VCC的电阻。当信号浮空时,上拉电阻用于设置默认状态。
回想一下,当输入引脚处于高阻抗模式且不受外部电源驱动时,它会浮在残余电压电平上。上拉电阻通过在信号未被主动驱动时将信号强制施加到VCC来防止引脚浮动。当另一个源将信号驱动为低电平(接地)时,上拉电阻被覆盖,输入引脚将读为0。
许多微控制器提供内部上拉配置选项。有时,需要一个特定的上拉电阻值,这需要使用外部上拉而不是芯片的内部上拉。
下拉
下拉电阻是将信号接地的电阻。下拉信号用于在信号浮动时设置默认状态。当另一个信号源将信号驱动为高电平(连接到VCC)时,下拉电阻被覆盖,输入引脚将读为1。
许多微控制器提供内部下拉配置选项。有时,需要特定的下拉电阻值,这需要使用外部下拉电阻而不是芯片的内部下拉电阻。
电流灌入
“灌电流”表示电流正在流入引脚,节点或信号。对于数字IO,current sink提供了到负载的接地连接。
电流源/拉电流
“拉电流”与current sink相反:电流从引脚,节点或信号中流出。对于数字IO,current source为负载提供电压源。
拉电流 和 灌电流 都具有电流流动,但是方向不同。
GPIO引脚的主要配置选项是
输入或
输出。
将GPIO配置为输入时,可以将其用于读取电信号的状态。将GPIO配置为输入会使该引脚进入高阻抗状态。
通常,主要通过以下三种方式之一配置GPIO输入:
- 高阻抗(默认-如果未驱动,则浮动)
- 上拉(内部电阻连接到VCC)
- 下拉(内部电阻接地)
大多数GPIO输入引脚还具有内部迟滞功能,可防止引脚上的虚假状态改变。通常,迟滞(hysteresis)是内置功能,而不是可配置的设置。
GPIO输出模式
将GPIO配置为输出时,可以将其用于驱动高电平或低电平。GPIO输出主要有两个配置选项:推挽和漏极开路。
推挽输出
在大多数情况下,推挽是默认的GPIO输出设置。推挽式GPIO具有提供和吸收电流的能力。
使用推挽式GPIO,晶体管连接到VCC或GND以驱动高电平或低电平信号。当输出变低时,信号被主动“拉”到地,当输出变高时,信号被主动“推”到VCC。
开漏输出
与推挽不同,开漏输出只能吸收电流。输出具有两种状态:低阻抗和高阻抗。为了在线路上实现逻辑高输出,使用上拉电阻将漏极开路输出连接到所需的输出电压电平。
您可以将漏极开路的GPIO看作是一个接地或断开的开关。
漏极开路GPIO通常可以以两种不同的模式进行配置:
大多数利用漏极开路电路的应用都在漏极开路输出上利用外部上拉电路。通常,内部上拉值不足以用于目标电路。
当多个门或引脚连接在一起时,例如通过i2c总线,开漏输出非常有用。当设备不使用总线时,漏极开路输出处于高阻抗模式,并且电压由上拉电阻上拉至高电平。当设备将输出驱动为低电平时,所有连接的线将绑在一起,因此将变为低电平。
开漏输出的另一个常见用途是让多个外部设备驱动微控制器上的单个低电平有效中断引脚。
集电极开路
“集电极开路”在功能上与“漏极开路”相同。“集电极开路”是指在BJT晶体管输出上的电流吸收器,而“开漏”是指在FET输出上的电流吸收器。
我在元器件的数据说明书上遇到的“集电极开路”比在微控制器数据表上遇到的更多。
GPIO速度
GPIO速度控制压摆率,即信号可以在低/高值(“上升时间”和“下降时间”)之间变化的速率。速度配置选项描述为“速度”,“摆率”,“频率”和“高频模式”。
通过提高GPIO速度,可以提高输出电压的变化率(减少上升时间)。但是,电路的功耗和噪声会随着GPIO速度的增加而增加。默认情况下,除非有特殊原因需要提高GPIO速度,否则应将其保持在低速状态。
高驱动
高驱动GPIO是推挽式引脚,能够提供比典型引脚更大的电流。虽然您必须查看每个芯片的数据表以了解引脚的电流容量,但典型的推挽式GPIO可以提供/吸收大约±8mA的电流,而高驱动引脚可以提供/吸收高达±40mA的电流。
高驱动引脚使您的微控制器可以直接驱动需要高于正常电流的IO,例如LED。使用高驱动引脚可以消除外部电流放大电路的需求,从而有助于简化电气设计并降低成本。