单片机的几种IO口

前言:
  学习单片机开发也有一段时间了,对一些底层的东西不太了解或不够深入,希望能弥补上这些知识空缺。

1 GPIO的几种状态

  • 输入状态
    • 浮空输入
    • 上/下拉输入
    • 模拟输入
  • 输出状态
    • 推挽输出
    • 开漏输出

2 输入状态

2.1 浮空输入

  辅控输入即IO口在芯片内部既不接上拉电阻也不接下拉电阻,输入电阻相当于非常大。IO口的电平状态不确定,完全由外部决定,悬空时用示波器直接测量可能是高电平也可能是低电平。由于浮空状态容易受到干扰甚至是静电导致芯片损坏,因此未使用的脚一般要避免浮空。
  浮空输入的常见运用是检测按键状态。

2.2 上拉/下拉输入

  IO上拉输入指的是通过配置,在芯片内部将该IO串联电阻后接Vcc;IO下拉输入指的是通过配置,在芯片内部将该IO串联电阻后接Gnd。

2.3 模拟输入

  普通的数字IO口可以通过输入数据寄存器的0或1读取到外部电平的高低状态,而模拟IO无法通过输入寄存器的值反应电平的高低,一般需要借助ADC或电压比较器去获取外部电平的值。
  常用于AD检测或电压比较器。

3 输出状态

3.1 推挽输出

  推挽输出可以输出高低电平,可以直接驱动功耗不大的数字器件。内部结构相当于两个三极管或MOSFET互补工作,不管输出高还是低,总有一个开关管导通。如果两个推完输出相互直连,其中一个芯片若输出高,此时上面的MOS导通下面MOS闭合,而一个芯片若输出低,即下面的MOS导通上面的MOS闭合,电流会从上MOS导通的VCC直接流向下MOS导通的GND,整个通路电阻很小,将会发生短路并损坏端口。因此推挽输出不能实现”线与“。

3.2 开漏输出

  开漏输出只能输出低电平,如果要输出高电平必须通过外部上拉电阻才能实现。内部输出1时MOS管截止,输出与地断开,这时候IO其实没有驱动能力,需要外部连接上拉电阻才能输出高电平;内部输出0时MOS管导通接地,所以开漏达到输出低电平效果。开漏输出的吸电流能力较强,适合做电流型的驱动。
  关于开漏输出接上拉电阻的一大运用是IIC线路。当上拉电阻阻值较小时,上升沿的延迟就小,但功耗较大,反之,当上拉电阻阻值较大时,上升沿延迟就大,但功耗较小。但电阻影响上升沿不影响下降沿。根据上升沿时延和功耗的需要,综合考虑选择合适的上拉电阻。

3.3 高阻输出

  IO的高阻态实际上是输出IO,与浮空输入有些类似,输入电阻都非常大。不同在于浮空输入是输入型IO,而高阻态IO实际是开漏输出在输出高电平时的状态,且外部不接上拉电阻。

4 芯片复位后的IO状态

  通常芯片复位后IO初始状态是高阻输入,为了防止芯片被异常复位时的IO电平变化对外部器件产生异常动作。但为了避免高阻输入产生漏电流,在芯片启动后需要对端口进行配置,改为其他状态,如内部拉高输入或输出。

5 IO的驱动能力

  大部分的单片机IO口都可以选择驱动能力的强弱,一般来说驱动能力越强则功耗损耗也越大。IO对外部的驱动能力既要看电压驱动能力,还要看电流驱动能力。有个简易的判断驱动能力是否足够的方法,将电路开路后则是电压是否符合负载电压,如果负责则表示电压驱动能力足够,否则电压驱动能力不够。如果接上负载后电压降低了,这就表明电流驱动能力不足。