单片机中常见GPIO的八种工作模式详解

在嵌入式电路的设计当中,一定会接触到GPIO端口的设置
如果在电路设计当中,GPIO端口外围匹配电路设计不当,在电路工作的时候可能会引起工作的异常。
常见的异常分为:
1.GPIO存在中间电平,单片机不能正确识别当前电平状态,导致通讯异常;
2.GPIO端口在上电过程中有台阶,与1问题类似;
3.GPIO端口驱动能力不足,导致通讯异常;
那么通常单片机内部的GPIO是什么样的结构,又该如何进行外部电路的匹配设计:
以STM32为例,展示单片机内部的GPIO端口设计:
STM32的八种GPIO口模式:
1) GPIO_Mode_AIN 模拟输入;
2) GPIO_Mode_IN_FLOATING 浮空输入;
3) GPIO_Mode_IPD 下拉输入;
4) GPIO_Mode_IPU 上拉输入;
5) GPIO_Mode_Out_OD 开漏输出;
6) GPIO_Mode_Out_PP 推挽输出;
7) GPIO_Mode_AF_OD 复用开漏输出;
8) GPIO_Mode_AF_PP 复用推挽输出。

STM32 普通 GPIO 内部逻辑图:
请添加图片描述
保护二极管:
IO引脚上下两边两个二极管用于防止外部电压过高、过低的电压输入。当引脚电压高于VDD的时候,上方二极管导通,电压被钳位在VDD+0.3V(肖特基二极管)左右;当引脚电压低于VSS时(有负压输入IO口的时候),下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。也叫钳位二极管。

P-MOS管和N-MOS管:由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输出”和“开漏输出”的模式。

TTL肖特基触发器:信号经过触发器后,模拟信号转化为0和1的数字信号。但是,当GPIO引脚作为ADC采集电压的输入通道时,用其“模拟输入”功能,此时信号不再经过触发器进行TTL电平转换。(可以理解为一个比较器,大于某个值是1,小于某个值是0)
查看《STM32中文参考手册V10》中的GPIO的表格时,会看到有“FT”一列,这代表着这个GPIO口时兼容3.3V和5V的;如果没有标注“FT”,就代表着不兼容5V。比如STM32F103VET6的GPIOE口那一组全部兼容5V,其他组是部分兼容5V。

1、模拟输入 GPIO_Mode_AIN

2、浮空输入 GPIO_MODE_IN_FLOATING

3、下拉输入GPIO_Mode_IPD

4、上拉输入GPIO_Mode_IPU

5、开漏输出GPIO_Mode_Out_OD

6、推挽输出GPIO_Mode_Out_PP

7、复用开漏输出GPIO_Mode_AF_OD

8、复用推挽输出GPIO_Mode_AF_PP

什么是推挽结构和推挽电路?
推挽结构一般是指两个参数相同的三极管或MOS管分别受两互补信号的控制,总是在一个三极管或MOS管导通的时候另一个截止。高低电平由输出电平决定。
什么是开漏结构和开漏电路?
开漏电路结构值在推挽电路结构中只有下三极管或者mos管导通或者截止,当导通的时候输出低电平。当截止的时候,输出电平有外部上拉电源决定。

左侧为推挽输出,可以输出高低电平。右侧为开漏输出,只能输出低电平,高电平靠外部上拉电阻决定。
图中所示为三极管,也可以叫开集输出(集电极开路输出),开漏输出是当这个管子为MOS管,漏极开路输出,叫开漏输出。

总结:当进行单片机GPIO的端口设置时,要明确将GPIO口设置成那种模式,避免在实际电路中出现没有明确端口定义而出现的端口配置问题。
当GPIO口作为输出口使用时,确认对手件的IO口输入状态是什么;
1.对手件浮空输入,单片机可设置为推挽进行拉低和拉高;也可以设置成上拉输出,下拉输出;
2.对手件下拉输入,单片机设置为上拉输出时,会存在中间电平,需要明确电阻是多少输出电平是否影响正常通讯;
当对手件用作输出时,确认内部是何种输出,是否带有上拉,如有有上拉,那么单片机设置输入时就不再设置为输入下拉,会存在中间电平,需要明确电阻是多少输出电平是否影响正常通讯。

作者:李抱石

物联沃分享整理
物联沃-IOTWORD物联网 » 单片机中常见GPIO的八种工作模式详解

发表回复