stm32简明教程系列(二)----GPIO

GPIO全称为通用输入/输出端口。是stm32用于输出信号,输入信号的通道。他有以下八种模式。

输入方式

  • 浮空输入 GPIO_Mode_IN_FLOATING
  • 上拉GPIO_Mode_IPU
  • 下拉GPIO_Mode_IPD
  • 模拟输入 GPIO_Mode_AIN

输出方式

  • 开漏输出GPIO_Mode_AF_OD
  • 开漏复用GPIO_Mode_AF_OD
  • 推挽式输出GPIO_Mode_Out_PP
  • 推挽式复用功能GPIO_Mode_AF_PP

我们分别介绍一下他们各自的原理以及用途。还是首先祭出这张总的原理图:

我们先来讲一下这个结构图。我们可以看到虚线所框住的两个部分,即分别为输入输出的驱动器。输入驱动器的主要元件是TTL施密特(肖特基)触发器。这个触发器的主要作用是:设定电压阈值,超过/低于该电压,才可通过。输出驱动器器的主要元件是P-MOS管和一个N-MOS管。

这里先介绍一下MOS管。对于我们后面理解电路有很大的帮助。

MOS管是由加在输入端栅极的电压(GU)来控制输出端漏极的电流(DI)的元器件。它类似于三极管,有三个极,分别为栅极/门极(G),源极(Source)和漏极(Drain)。按沟道半导体材料的不同,结型和绝缘栅型各分N沟道和P沟道两种。若按导电方式来划分,场效应管又可分红耗尽型与加强型。结型场效应管均为耗尽型,绝缘栅型场效应管既有耗尽型的,也有加强型的。如下图:

导通特性 :

  • NMOS的特性,Vgs大于一定的值就会导通,适合用于源极接地时的情况(低端驱动),只要栅极电压达到4V或10V就可以了。
  • PMOS的特性,Vgs小于一定的值就会导通,适合用于源极接VCC时的情况(高端驱动)。但是,虽然PMOS可以很方便地用作高端驱动,但由于导通电阻大,价格贵,替换种类少等原因,在高端驱动中,通常还是使用NMOS

1.浮空输入

1)原理图

这里我们可以看到,外部的电平信号通过左边编号1的I/O端口进入STM32,经过编号2的施密特触发器的整形送入编号3的“输入数据寄存器”,在“输入数据寄存器”的另一端(编号4),CPU可以随时读出I/O端口的电平状态。

2)适用场合

(1)按键识别

(2)串口RX1 

2.输入上拉模式

1)原理图

与前面的浮空输入模式相比,仅仅是在数据通道上部,接入了一个上拉电阻,并接到设备电压(VDD)。根据STM32的数据手册,这个上拉电阻阻值介于30K~50K欧姆。同样,CPU可以随时在“输入数据寄存器”的另一端,读出I/O端口的电平状态。

2)适用场合

IO内部上拉电阻输入

3.输入下拉模式

1)原理图

数据通道的下部,接入了一个下拉电阻,并接到电路共地端(VSS)。根据STM32的数据手册,这个下拉电阻阻值也是介于30K~50K欧姆。

2)适用场合

 IO内部下拉电阻输入

4.模拟输入通道

1)原理图

模拟通道输入的配置则更加简单,信号从左边编号1的端口进入,从右边编号2的一端直接进入ADC模块。 
这里看到所有的上拉、下拉电阻和施密特触发器,均处于断开状态,因此“输入数据寄存器”将不能反映端口上的电平状态,也就是说,模拟输入配置下,CPU不能在“输入数据寄存器”上读到有效的数据。这也是为什么我们在选择ADC采集时,不能通过直接读取GPIO输入数据寄存器来获得模拟电压值。而是必须读取ADC数据寄存器的值。

2)适用场合

应用ADC模拟输入,或者低功耗下省电 

5.开漏输出GPIO_Mode_Out_OD

1)原理图

这是开漏输出模式的配置,当CPU在左边的编号1端通过位设置/清除寄存器或输出数据寄存器写入数据后,该数据位将通过编号2的输出控制电路控制3,将信号传送到编号4的I/O端口。

如果CPU写入的是逻辑“1”,则编号3的N-MOS管将处于关闭状态,此时I/O端口的电平将由外部的上拉电阻决定,如果CPU写入的是逻辑“0”,则编号3的N-MOS管将处于开启状态,此时I/O端口的电平被编号3的N-MOS管拉到了VSS的零电位。 
同时,根据蓝色线路,施密特触发器处于开启状态,这意味着CPU可以在“输入数据寄存器”的另一端,随时监控I/O端口的状态;通过这个特性,还实现了虚拟的I/O端口双向通信:只要CPU输出逻辑“1”,由于编号3的N-MOS管处于关闭状态,I/O端口的电平将完全由外部电路决定,因此,CPU可以在“输入数据寄存器”读到外部电路的信号,而不是它自己输出的逻辑“1”。 
开漏形式的电路有以下几个特点: 
1、 利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经电阻上拉后 ,从MOSFET到GND。IC内部仅需很小的栅极驱动电流。 
2、 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。(上拉电阻的阻值决定了逻辑电平转换的沿的速度 。阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。) 
3、开楼提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。 
4、可以将多个开漏输出的Pin,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。这也是I2C,SMBus等总线判断总线占用状态的原理。

2)适用场合

IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能 

 因为通常需要再加一个上拉电阻,所以不怎么用。

6.开漏复用GPIO_Mode_AF_OD

1)原理图

开漏复用输出模式与开漏输出模式的配置基本相同。不同的是编号2的输出控制电路的输入与复用功能的输出端相连,此时输出数据寄存器被从输出通道断开了。

同样,CPU可以从“输入数据寄存器”读到外部电路的信号。

2)适用范围

片内外设功能(TX1,MOSI,MISO.SCK.SS)

7.推挽式输出GPIO_Mode_Out_PP

1)原理图

在开漏输出模式的基础上,推挽输出模式仅仅是在编号2的输出控制电路之后,增加了一个P-MOS管。 

当输出逻辑“1”时,编号3处的P-MOS管导通,而下方的N-MOS管截止,达到输出高电平的目的。 
当输出逻辑“0”时,编号3处的P-MOS管截止,而下方的N-MOS管导通,达到输出低电平的目的。

这个是很容易理解的,输出控制的两个出路都是“1”的时候,也就是说两个MOS管的栅极输入都是高电平。由于P-mos管的特性,

栅极电压大于预定值,该mos管开启。下方n—mos关闭。
在这个模式下,CPU仍然可以从“输入数据寄存器”读到外部电路的信号。 
推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。 
推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。

2)适用场合

IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的 

8.推挽式复用功能GPIO_Mode_AF_PP

最后是推挽复用输出模式,同样的道理,编号2的输出控制电路的输入,与复用功能的输出端相连,此时输出数据寄存器被从输出通道断开了。 
其它部分与前述模式一致,包括对“输入数据寄存器”的读取。

2)应用场合

片内外设功能(I2C的SCL,SDA)

小结:

如果接按键,则配置成上拉输入;如果是上拉,无键下1,按下0,扫描要用0扫描。如果是下拉,要用1扫描。

一般输出尽量用推挽,输出电流大20mA左右,比如接上一个LED灯;输入尽量用浮空;双向比如DS18B20,和特殊要求比如IIC用开漏;AD用模拟;第2功能用复用;上下拉也可以作为输出,但是推挽的驱动能力更好。

  • 浮空,顾名思义就是浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了。
  • 开漏,就等于输出口接了个NPN三极管,并且只接了e,b.。而c极是开路的,你可以接一个电阻到3.3V,也可以接一个电阻到5V,这样,在输出1的时候,就可以是5V电压,也可以是3.3V电压了。但是不接电阻上拉的时候,这个输出高就不能实现了。 
  • 推挽,就是有推有拉,任何时候IO口的电平都是确定的,不需要外接上拉或者下拉电阻。

猜你喜欢

转载自blog.csdn.net/quinn1994/article/details/82288511