单片机的GPIO一般会有:
输入 输出 模式,输入模式有输入上拉,下拉或高阻
输出模式有推挽,开漏。
51单片机还有准双向模式。
输入模式 上拉,下拉都比较好理解。比如按键输入时,将口线设置为输入上拉,这样就按键可以不上拉。输入上拉模式一般上拉电流很小,通常情况为数百微安,如果上拉电流不合适,外围电路就得单独考虑上拉问题。
输出模式常用推挽输出,当输出高电平时,可以源出电流,输出低电平时,可以源入电流。
比如点亮一个LED灯,使用低电平点亮,使用推挽输出,如果LED灯被上拉到5V,3.3V系统上,为高时,LED有可能仍然会亮。只是比为低时亮度小一点。这种情况下,如果将输出改为OD,LED就可以正常亮灭。
另一个例子,GPIO模拟I²C总线。SCL线可以设置为推挽输出,没问题。但SDA是双向的,读取数据时或读ACK时,需要改变端口方向。比如SDA输出为PP高,从器件异步ACK拉低,端口会输出大电流。如果SDA线改成 OD输出,则无此问题。当需要输入时,不需要改变端口方向,只需要将端口输出置高即可。总线上不会有异常电流。
51单片机的准双向模式就更神奇了,可以与OD输出类比,但不需要外接上拉电阻(加了也无妨)。
输出为高时,在开始的2个CPU时钟为强上拉,保证动态特性,随后变成弱上拉。此时如果外部输入为高,则保持弱上拉,可以读入稳定的高。如果外部输入为低,端口变成极弱上拉,能读入低。当输出为低的时候,强下拉到低。需要注意的是,外部输入的电流不要过大,不然端口电流过大,可能会latch up。
作者: southcreek, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-408807.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
curton 2021-6-30 08:13