1.GPIO 是什么?
GPIO,全称为(通用输入输出端口)。
GPIO是控制或者采集外部器件的信息的外设,可以由软件程序控制,用于输出或者输入高低电平或者模拟电压。
GPIO可以与硬件进行数据交互,控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。
2.GPIO类型
根据上图可知,其电路图可分为上下两个部分,即输出驱动器和输入驱动器。而与其对应的电路出口/入口就对应了我们的8种工作模式:分为4种输入模式和4种输出模式。
1.1:推挽输出
我们可以先将首图的输出驱动器中的P/N-MOS简化成开关,如下图所示:
如上图所示,IO引脚外接了一个灯并接地,当我们想将此引脚置为高电平时,内部寄存器修改对应的数据,使得P-MOS接通,VDD输出3.3V电压。小灯亮起。电路示意图如下所示:
如果我们想将此引脚置为低电平时,内部寄存器先修改对应数据,使得N-MOS接通,P-MOS断开,VSS接通,对外输出低电平。小灯熄灭。电路示意图如下所示:
1.2开漏输出
在开漏输出模式下,只有N-MOS工作,P-MOS保持断开,当我们需要将此引脚置为高电平时,N-MOS断开,整个引脚处于断路状态。电路不导通。
而当我们将此引脚置为低电平时,N-MOS接通,此时小灯外部的5V电压输入至N-MOS的VSS,电路导通,小灯亮起。(注:正常引脚都是为3.3V容忍,使用5V电压需使用5V容忍引脚(查数据手册))。
1.3 复用开漏/推挽输出
在单片机上,我们也会外接其他外设来控制引脚,而内部的寄存器控制跟外设控制会冲突,因此,在需要使用外设控制引脚时,使用复用输出模式避免与内部寄存器冲突。
1.4输入模式详解
由于输入驱动器中模拟输入/复用功能输入/寄存器可以同时读取引脚状态,因此不存在复用模式,只有跟上/下拉电阻和数字/模拟信号相关的输入模式。
- 其第一种便是浮空输入模式,将引脚设置为浮空输入模式后,其上/下拉电阻不导通,电流直接流向施密特(肖特基)触发器,并由此触发器判断其高/低电平。
- 上拉输入模式:将引脚设置为上拉输入模式后,上拉电阻导通,电位上拉,当IO引脚输入低电平时,可以读取到低电平;相反当输入为高电平或无信号时,因为上拉电阻的作用可以读取到高电平。
- 下拉输入模式:与上拉模式相反;将引脚设置为下拉输入模式后,下拉电阻导通,电位下拉,当IO引脚输入低电平或者无信号时,可以读取到低电平;相反当输入为高电平时,因为下拉电阻的阻值大,电流往触发器方向流动,所以可以读取到高电平。
- 模拟输入模式:此时IO引脚输入的电流流向模拟输入,不经过触发器,从而读取到具体的电压值。