博客专栏

EEPW首页 > 博客 > 「技术文章」STM32 GPIO模式汇总分析

「技术文章」STM32 GPIO模式汇总分析

发布人:电子资料库 时间:2023-02-08 来源:工程师 发布文章

IO也叫GPIO,即通用输入输出端口,主要有一下几种模式:
1、浮空输入模式;
2、上拉输入;
3、下拉输入;
4、模拟输入;
5、 推挽输出;
6、 开漏输出;
7、 复用推挽输出;
8、 复用开漏输出。

以下是对STM32 MCU 的GPIO进行分析

1、浮空输入模式

image.png


上图红色的表示便是浮空输入的过程,外部输入0时,读出的就是0;外部输入1时,读出的就是1;外部没有输入,IO处于阻塞读不出电平状态。

用处:感觉在信号处理方面用的比较好,比如在读取一段一段的波形,可以清晰的知道什么时候是0信号,什么时候是1信号,什么时候是没有信号的。

类比:51单片机找不到类似的输入模式

2、上拉输入

image.png


上拉输入和浮空输入的区别是,上拉电阻的开关关闭了,如上图所示。

当IO没有输入的时候,IO电平等于VDD即1电平;当IO输入低电平的事就是VDD和IO口形成一个闭环电路,根据分压法IO口出分担的电压为0。

当IO输入为1时,IO口电压和VDD相等,上拉电阻好比断开了,IO口的电压还是0。

用处:在按键使用的时候特别适用,按键的一端接地,一端接IO口,当按键没有按下的时候电平为高电平,当按键按下的时候IO是低电平。

类比:51单片机P1 P2 P3口就是上拉输入的,大家可以回忆一下51单片机的按键操作,我们应该知道51单片机除了P0口内部没有上拉电阻其他的IO都有上拉电阻。大家应该明白了51单片机没有按键的时候,我们读到的是高电平了吧!

小计:

上拉输入,不管输入1还是不输入IO的电平都是1,输入IO口的电平是0。 PS按键是共地还是共VCC选择的时候要慎重。

3、下拉输入

image.png


下拉输入和上拉输入的区别是:上拉电阻的开关打开了,下拉电阻的开关关闭了,如上图所示。

当IO没有输入的时候,IO电平等于VSS即0电平;当IO输入高电平的时候IO口就和VSS组成一个闭合电路,根据分压法,电压都分担到了电阻上,所以IO口电平为高电平;当IO输入为低电平的时候,IO口肯定是低电平。

用处:在按键使用的时候特别适用,按键的一端接VCC,一端接IO口,当按键没有按下的时候电平为低电平,当按键按下的时候IO是高电平电平。

类比:51单片机没有类似的IO口

PS按键是共地还是共VCC选择的时候要慎重。

4、模拟输入

image.png


模拟输入,大家看上图的红色的标示。模拟输入和其他输入最大的区别:

1、没有连接TTL触发器,这样保留最原始的电压值,不是转换过后的0和1信号

2、数据连接的终点不一样,其他的输入我们都是读取输入寄存器的值,而模拟输入,数据直接送到片上外设,一般是ADC。

5、 推挽输出

image.png


推挽输出:可以输出高,低电平,连接数字器件;推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。

上图就是推挽输出的过程。上图标示的“2”便是我们的输出寄存器,我们可以写入1或者0,如果写入1,图上的“3”上面的P-mos导通,N-mos截止,IO口等价直接连接在VDD上,所以IO口电平是高电平。同理输出寄存器的值为0时,P-mos截止,N-mos导通。IO口直接连接在VSS上,所有IO口电平为低电平。

大家可能会问图上标的1是什么?其实1的寄存器就是间接向输出寄存器写入。

用处:适合做一些开关控制,应为推挽输出可以快速的切换0和1,例如继电器,led等。

类比:51单片机没有类似的IO口

6、 开漏输出

image.png


开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)

上图红色标示便是开漏输出的过程图,图上1和2的标示已经在推挽输出中介绍了,此处不再说明。开漏输出与推挽输出唯一的区别就是开漏输出只有一个N-mos管。当输出寄存器的值为0的时候,n-mos导通,IO口直接连接VSS,输出为低电平。当输出寄存器为1的时候,n-mos截止,IO口直接和输出端断开了,处于浮空状态。电平状态不可控制。

大家可能会说,这样设计不是傻缺么?有什么用设计这种输出方式。其实这种方式很有用的,请看下面的类比
 
类比:
 
我们都知道51单片机PO口,是不是想到什么了?对PO口就是类似的开漏输出,PO口作为输出的时候一定要加上拉电阻,加上上拉电阻后,输入寄存器为1的时候,n-mos截止截止了,好比IO和输出端断开,这是IO口点压就等于上拉电阻的电压。这样变输出了高电平,如果IO口的高电平,连接到了外设低电平的,就会产生电流,电流不会流到IO口,(N-mos管截止了)直接流到外设。是不是增大了驱动能力了。(IO口的驱动能力有限,不能容忍大电流)。
 
通过改变上拉电阻的大小和电压就能完成很多功能。

开漏形式的电路有以下几个特点:

1. 利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。

2. 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。(上拉电阻的阻值决定了逻辑电平转换的沿的速度 。阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。)

3. OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。

4. 可以将多个开漏输出的Pin,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。这也是I2C,SMBus等总线判断总线占用状态的原理。补充:什么是“线与”?:

在一个结点(线)上, 连接一个上拉电阻到电源 VCC 或 VDD 和 n 个 NPN 或 NMOS 晶体管的集电极 C 或漏极 D, 这些晶体管的****极 E 或源极 S 都接到地线上, 只要有一个晶体管饱和, 这个结点(线)就被拉到地线电平上. 因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS),晶体管就会饱和, 所以这些基极或栅极对这个结点(线)的关系是或非 NOR 逻辑. 如果这个结点后面加一个反相器, 就是或 OR 逻辑.

其实可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1。

image.png


该图中左边的便是推挽输出模式,其中比较器输出高电平时下面的PNP三极管截止,而上面NPN三极管导通,输出电平VS+;当比较器输出低电平时则恰恰相反,PNP三极管导通,输出和地相连,为低电平。右边的则可以理解为开漏输出形式,需要接上拉。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。



关键词: GPIO 汇总

相关推荐

技术专区

关闭