这里写目录标题
一、GPIO简介
GPIO(general porpose intput output):控制或者采集外部器件的信息的外设,即负责输入输出(通用的输入输出端口)。它按组分配,每组16 个IO 口,组数视芯片而定。
八种工作模式
模式名称 | 性质 | 特征 |
---|---|---|
浮空输入 | 数字输入 | 可读取引脚电平。若引脚悬空。则电平不稳 |
上拉输入 | 数字输入 | 可读取引脚电平,内部连接上拉电阻,悬空时默认高电平 |
下拉输入 | 数字输入 | 可读取引脚电平,内部连接下拉电阻,悬空时默认低电平 |
模拟输入 | 模拟输入 | GPIO无效,引脚直接接入内部ADC |
开漏输出 | 数字输出 | 可输出引脚电平,高电平为高阻态,低电平接VSS |
推挽输出 | 数字输出 | 可输出引脚电平,高电平接VDD,低电平接VSS |
复用开漏输出 | 数字输出 | 由片上外设控制,高电平为高阻态,低电平接VSS |
复用推挽输出 | 数字输出 | 由片上外设控制,高电平接VDD,低电平接VSS |
二、GPIO基本结构分析
参考正点原子STM32F103ZET6精英版
最右侧的I/O引脚就是我们可以看到的芯片实物的引脚,其他部分都是GPIO的内部结构。
①保护二极管
保护二极管共有两个,用于保护引脚外部过高或过低的电压输入。当引脚输入的电压高于VDD时,上面的二极管导通。当引脚输入电压低于VSS时,下面的二极管导通,从而使输入芯片内部的电压处于比较稳定的值。虽然有二极管的保护,但这样的保护却很有限,大电压大电流的接入很容易烧坏芯片。
②上拉、下拉电阻
他们阻值大概在30~50K欧之间,可以通过上、下两个对应开关控制,这两个开关由寄存器控制。
③施密特触发器
对于标准施密特触发器,当输入电压高于正向阙值电压,输出为高;低于负向阙值电压,输出为低;位于正负向阙值之间,状态保持上个状态不变。
如下图所示,U表示输入电压,B表示经过施密特触发器处理后的电压,绿色的线代表正向阙值和负向阙值。
④P-MOS 管和 N-MOS管
这个结构控制GPIO的开漏输出和推挽输出两种模式。开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。推挽输出:这两只对称的MOS管每次只有一只导通,所有导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载拉电流。推拉输出既能提高电路的负载能力,又能提高开关速度。
三、GPIO的八种工作模式
1、浮空输入
上拉、下拉电阻为断开状态,施密特触发器打开,输出被禁止。输出浮空模式下,IO口的电平完全是由外部电器决定。如果IO引脚没有连接其他的设备,那么检测其输入电平是不确定的。该模式可以用于按键检测等场景。
2、上拉输入
上拉电阻导通,施密特触发器打开,输出被禁止。在外部上拉电阻的时候,可以使用内部上拉电阻,这样可以节省一个外部电阻,但是内部上拉电阻的阻值较大,所以只是“弱上拉”,不适合做电流型驱动。
3、下拉输入
下拉电阻导通,施密特触发器打开,输出被禁止。在需要外部下拉电阻的时候,可以使用内部下拉电阻,这样可以节省一个外部电阻,但是内部下拉电阻阻值较大,所以不适合做电流型驱动。
4、模拟输入
上下拉电阻断开,施密特触发器关闭,双MOS管也关闭。其他外设可以通过模拟通道输入输出。该模式下需要用到芯片内部的模拟电路单元,用于ADC、DAC、MCO这类操作模拟信号的外设。
5、开漏输出
STM32的开漏输出是数字电路输出的一种。
①只能输出低电平,不能输出高电平
②如果要输出高电平,则需要外接上拉
③开漏输出具有“线与”功能,一个为低,全部为低,多用于I2C和SMBUS总线。
在开漏输出模式下,施密特触发器是工作的,所有IO口引脚的电平状态会被采集到输入数据寄存器中,如果对输入数据寄存器进行读访问可以得到IO口的状态。也就是说开漏输出模式下,我们可以读取IO引脚的状态。
6、推挽输出
①可以输出高低电平,用于连接数字器件,高电平由VDD决定,低电平由VSS决定
②推完结构指两个三极管受到两路互补的信号控制,总是在一个导通的时候另外一个截至。优点:开关效率高,电流大、驱动能力强。
③输出高电平时,电流输出到负载,叫灌电流,可以理解为推;输出低电平时,负载电流流向芯片,叫拉电流,即挽。
7、开漏式复用功能
一个IO口可以是通用的IO口功能,还可以是其他外设的特殊功能引脚,这就是IO口的复用功能。一个IO口可以是多个外设的功能引脚,我们需要选择作为其中一个外设的功能引脚。当选择复用功能时,引脚的状态是由对应的外设控制,而不是输出数据寄存器。
另外在开漏式复用功能模式下,施密特触发器也是打开的,我们可以读取 IO 口的电平状态,同时外设可以读取 IO 口的信息。
8、推挽式复用功能
复用功能介绍查看开漏式复用功能,结构分析参考推挽输出模式。