导读: MCU芯片中GPIO口的驱动方式大的可分为输出和输入两类,小的分可以分为8种。
一、四种输入方式
①上拉输入:上拉输入抗干扰能力强,特别适合接地信号的输入(比如低电平有效的按键信号输入)。其工作原理如图1所示。
- I/O 端口与TTL 施密特触发器之前接入了一个30K~50K 欧姆的上拉电阻,当I/O 端口悬空时,此时MCU 也能读到稳定的高电平状态,提高了噪声容限。
②下拉输入:下拉输入模式适合有效信号为高电平值的信号接入(比如高电平有效的按键信号输入),通过分压电阻来滤除信号毛刺,提高电平稳定性,其内部工作流程如图2 所示。
③浮空输入:浮空输入的最大特点就是MCU 读到的引脚状态完全跟随外部IO 口的电平变化,一般用于按键输入,抗干扰性能不如上拉和下拉方式,如果按键状态取高低电平的话建议采用上下拉的方式,浮空输入用的比较少,浮空输入的工作流程如图3所示。
- 红色指示箭头经过的黄色电路可以看出,信号直接由外部I/O 端口流到TTL 施密特触发器,整形后进入输入数据寄存器,然后由MCU 读取数据寄存器的电平状态
④模拟输入:模拟输入方式,顾名思义,就是将I/O 端口上的信号作为模拟信号直接输入到STM32 内部的ADC上,进行采样转换。其内部工作流程如图4 所示。
二、四种输出方式
①开漏输出:开漏输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对较强(一般20ma 以内)。另外,开漏输出模式下的I/O 端口还可以实现双向通信口的功能,通过图5 所示的内部原理图就能明显看出来。
- 从上图可以看出,开漏输出之所以能够实现双向通信的原因在于:当MCU 写1,即“输出控制电路”输出高电平时,N-MOS 管关断,此时I/O 的电平状态由外部的上拉电阻决定;同时,输入端的“TTL施密特触发器”开启,因此,MCU 可以随时读取到外部I/O 引脚上的电平状态。当MCU 写0,此时,N-MOS 管开启, I/O 口接入内部Vss 地端,即外部引脚被拉至低电平。
下面总结一下开漏输出的优点与不足:
优点:
- 驱动能力:利用外部电路的驱动能力,可以降低STM32 芯片内部IC 电路的驱动复杂度,这是由于开漏输出可以反向吸收外部流过负载的大电流。
- 电平匹配:用来匹配外部不同的电平传输,只需改变外部上拉电源的电压,就可以输出用户自定义的电平值(例如5V、12V、24V)。
- 线与功能:容易实现多个I/O 口的“线与”功能,只要将这些I/O 口连接在一起,加上上拉电阻即可。典型的应用就是I2C、SMBus 等总线可据此原理判断总线是否被占用。
不足:
- 当选择的外部上拉电阻的阻值较小时,信号上升沿输出时延小,但相应的功耗会增大;反之阻值较大,功耗降低,但上升沿输出延时增加。对于传输高频信号来说,用户应该结合具体应用进行一下权衡。
②开漏复用输出:开漏复用输出与开漏输出的不同点在于:“输入控制电路”的输入端接的是STM32 芯片内部的特定功能外设,例如内部SPI 模块输出的MISO、MOSI、SCK 信号引脚。如图6所示。
- 一般情况下,当使用片上特定资源与外部器件进行通信时,需要将与该片上外设相关的引脚设置成开漏复用输出模式。
③推挽输出:推挽输出模式下,I/O 口可以输出高、低电平。本质上内部采用的是推挽结构,就是两个三极管分别受两互补信号的控制,同一时刻,只有一个三极管导通,另外一个截止。输出的高低电平值由IC 电路的电源决定。其内部工作流程如图7所示。
- 图7中的P-MOS 和N-MOS 是两只参数完全对称的三极管,每次只有一个功率管导通,因此,导通损耗小,效率高。同时,输出端不仅可以向负载灌入电流,还可以从负载抽取电流,故又名“推拉式结构”。这种工作方式的最大优势在于:既能提高I/O 口带负载的能力,又能提高开关速度。
③推挽复用输出:推挽复用输出与推挽输出的差别在于“输出控制电路”的输入端连接的是STM32 芯片内部的外设电路,例如STM32 内部I2C 电路的SCL、SDA 信号引脚。其内部工作流程如图8所示。
三、推挽和开漏输出的常规电路图
![](http://upload-images.jianshu.io/upload_images/4859654-106b68ab92d04079.png?imageMogr2/auto-orient/strip|imageView2/2/w/367/format/webp)