保护二极管及上、下拉电阻
引脚的两个保护二级管可以防止引脚外部过高或过低的电压输入,当引脚电压高于 VDD 时, 上方的二极管导通,当引脚电压低于 VSS 时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。尽管有这样的保护,并不意味着 STM32 的引脚能直接外接大功率驱动器件,如直接驱动电机,强制驱动要么电机不转,要么导致芯片烧坏,必须要加大功率及隔离电路驱动。
P-MOS 管和 N-MOS 管
GPIO 引脚线路经过两个保护二极管后,向上流向“输入模式”结构,向下流向“输出模式”结构。先看输出模式部分,线路经过一个由 P-MOS 和 N-MOS 管组成的单元电路。这个结构使 GPIO 具有了“推挽输出”和“开漏输出”两种模式。
所谓的推挽输出模式,是根据这两个 MOS 管的工作方式来命名的。在该结构中输入高电平时, 经过反向后, 上方的 P-MOS 导通,下方的 N-MOS 关闭,对外输出高电平;而
在该结构中输入低电平时, 经过反向后, N-MOS 管导通, P-MOS 关闭,对外输出低电平。
当引脚高低电平切换时,两个管子轮流导通, P 管负责灌电流, N 管负责拉电流,使其负
载能力和开关速度都比普通的方式有很大的提高。推挽输出的低电平为 0 伏,高电平为 3.3
伏, 具体参考图 7-2,它是推挽输出模式时的等效电路。
开漏输出的特点
开漏端相当于 MOS 管的漏极(三极管的集电极),要得到高电平状态必须外接上拉电阻才行,因此输出高电平的驱动能力完全由外接上拉电阻决定,但是其输出低电平的驱动能力很强。开漏形式的电路有以下几个特点:
1. 输出高电平时利用外部电路的驱动能力,减少 IC 内部的驱动。
2. 开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出
低电平。 如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉
电源的电压,便可以改变传输电平。上拉电阻的阻值决定了逻辑电平转换的速度。阻值越大,速度越
低, 功耗越小。
3. 开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接
上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果
对延时有要求,则建议用下降沿输出。
4. 可以将多个开漏输出连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻
辑”关系,即“线与”。可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个
引脚输出为逻辑 0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平
便为 0,只有都为高电平时,与的结果才为逻辑 1。
四种输入模式
通过上面的引脚结构图可以得到如下三种方式:
- 浮空输入: CPU 内部的上拉电阻、下拉电阻均断开的输入模式。
- 下拉输入: CPU 内部的下拉电阻使能、 上拉电阻断开的输入模式。
- 上拉输入: CPU 内部的上拉电阻使能、 下拉电阻断开的输入模式。
而模拟输入模式是 GPIO 引脚连接内部 ADC。
拉电流负载、灌电流负载
拉电流负载
一种负载电流从驱动门流向外电路, 称为拉电流负载。 比如使用 STM32H7 的 GPIO 直
接驱动 LED 就是拉电流形式。
这里的“拉”是相对 IO 口来说的,上面的例子就是 LED 从 IO 口拉电流出来。
灌电流负载
负载电流从外电路流入驱动门, 称为灌电流负载。 比如下面这种形式的 LED 驱动电路 :
这里的“灌”就是指电流从外部灌入 IO 口。
IO 驱动能力
有了上面这些知识后再来看 IO 驱动能力,这里以 STM32H7 的 IO 为例(截图来自 STM32H7 数据手册) :
其中 sunk:灌。通过上面的截图可知:STM32H7 总的拉电流和灌电流不可超过 140mA,单个引脚最大不可超过 20mA,这个知识点, 大家要知道。
不使用的引脚推荐设置为模拟模式
主要从功耗和防干扰考虑。
- 所有用作带上拉电阻输入的 I/O 都会在引脚外部保持为低时产生电流消耗。此电流消耗的值可通过使用的静态特性中给出的上拉 / 下拉电阻值简单算出。
- 对于输出引脚,还必须考虑任何外部下拉电阻或外部负载以估计电流消耗。
- 若外部施加了中间电平,则额外的 I/O 电流消耗是因为配置为输入的 I/O。此电流消耗是由用于区分输入值的输入施密特触发器电路导致。除非应用需要此特定配置,否则可通过将这些 I/O 配置为模拟模式以避免此供电电流消耗。 ADC 输入引脚应配置为模拟输入就是这种情况。
- 任何浮空的输入引脚都可能由于外部电磁噪声,成为中间电平或意外切换。为防止浮空引脚相关的电流消耗,它们必须配置为模拟模式,或内部强制为确定的数字值。这可通过使用上拉 / 下拉电阻或将引脚配置为输出模式做到。
综上考虑,不使用的引脚设置为模拟模式, 悬空即可。