前言:
GPIO是单片机通用的输入输出引脚,基本用途可作为开关,常用于控制LED亮灭、蜂鸣器的鸣响、电机的转停,但由于驱动能力不够,常常要与三极管一起使用。其它的高级用途如I/O作为输入引脚,可检测外部的中断信号、与ADC结合可作为一个模拟的电压采集引脚,与定时器结合则作为PWM引脚。
GPIO8种工作模式
4种输入模式
输入浮空、输入上拉、输入下拉、模拟输入
输入模式下可读取端口的高低电平,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
1、输入浮空(不确定电平状态)
输入处于浮空状态,引脚的输入电平极易受到外界干扰而改变。
2、输入上拉(灌电流):
上拉是将不确定信号通过一个电阻钳位在高电平即默认为高电平的输入方式,电阻同时起限流作用;
(对于一个数字端口,输入不是高电平就是低电平)
3、输入下拉(拉电流):
下拉是将不确定信号通过一个电阻钳位在低电平。(即,电路中加上拉电阻或下拉电阻的目的是确定某个状态电路中的高电平或低电平)
注:灌电流即往I/O引脚里输入的电流;拉电流即从单片机的引脚出来到地的电流
4、模拟输入:
GPIO无效,引脚直接接入内部ADC
四种输入模式流程如下图所示。
在I/O引脚部分,接了两个保护二极管,用于对输入电压进行限幅。上方二极管为3.3V,当输入电压过高,则上方二极管导通,输入电压产生的电流就会直接流入VDD而不会流入内部电路,这样就可以避免过高的电压对内部电路产生伤害。
若输入的电压比VSS还低,则下方二极管会导通,电流会从VSS直接溜出去。
若输入电压在0~3.3V之间,则两个二极管不会导通,因此此处两个二极管起到保护电路作用。
施密特触发器:将输入电压信号整形成为矩形脉冲信号
经过此触发器整形的波形可以直接写入输入数据寄存器
4种输出模式
开漏输出、开漏复用输出、推挽输出、推挽复用输出
输出模式下可控制端口输出高低电平,用以驱动LED/控制蜂鸣器、模拟通信协议输出时序等
注:输出控制器:对输出数据寄存器的输出信号进行取反(达到正常逻辑)
1、推挽输出电路:
P-mos管与N-mos管相结合;可以输出高低电平(此模式下,高低电平具有较强的驱动能力),连接数字器件。
输出0时,P-MOS高阻,N-MOS导通(电平接地VSS),输出0。
输出1时,N-MOS高阻,P-MOS导通(电平接VDD),输出1(不需要外部上拉电路)可以连接数字器件。
2、开漏输出电路:
只有下面的N-mos管,上面没有P-mos管;输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。
输出0时,N-MOS导通,P-MOS不被激活,输出0。
输出1时,N-MOS高阻,P-MOS不被激活,输出1(需要外部上拉电路);可以读IO输入电平变化,此模式可以把端口作为双向IO使用。
此模式可作为通信协议的驱动方式,如IIC通信引脚。在多机通信情况下,此模式可避免各个设备的相互干扰。可用于输出5V的电平信号
注:场效应管是电压控制型元器件,只要对栅极施加电压,DS就会导通。结型场效应管有一个特性就是它的输入阻抗非常大,这意味着没有电流从控制电路流出,也没有电流控制电路。没有电流流入或流出,就不会烧坏控制电路。而双极型晶体管是电流控制型元器件,如果使用开集电路,可能会烧坏控制电路。