STM32 GPIO 8种模式

简介- Basic structure of a five-volt tolerant I/O port bit

在这里插入图片描述

引用自:STM32F4XX参考手册 P176

保护二极管:IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。
引脚电压大于VDD,上方二极管导通。
引脚电压低于VSS,下方二极管导通。
从而防止异常电压导致芯片损坏。

施密特触发器:将模拟信号转换成数字信号。

P-MOS管和N-MOS管:推挽输出和开漏输出。

·浮空输入模式

在这里插入图片描述

浮空输入模式:(空闲状态未知)
IO口电平信号直接传输进输入数据寄存器。
IO口电平状态完全由外部输入确定。
IO口引脚悬空情况下,电平状态为随机(未知的)。

·上拉输入模式

在这里插入图片描述

上拉输入模式:(空闲状态为高电平)
IO口电平信号直接传输进输入数据寄存器。
IO口引脚悬空情况下,电平状态为高电平。
IO口电平状态可由外部输入改变为低电平。

·下拉输入模式

在这里插入图片描述

下拉输入模式:(空闲状态为低电平)
IO口电平信号直接传输进输入数据寄存器。
IO口引脚悬空情况下,电平状态为低电平。
IO口电平状态可由外部输入改变为高电平。

·模拟输入模式

在这里插入图片描述

模拟输入模式:(绕过施密特触发器直接输入模拟信号)
I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,比如ADC模块等。

·推挽输出模式

在这里插入图片描述

  • 推挽输出结构
    在这里插入图片描述

推挽输出模式
可以输出高、低电平,效率高,电流大,驱动能力强。

推挽结构指两个MOS管受两路互补的信号控制,总是在一个导通的时候另外一个截止,
输出高电平时,电流输出到负载,叫灌电流,可以理解成推,输出低电平时,负载电流流向芯片,叫拉电流,即挽。

如上图所示,INT为输出数据寄存器(ODR),通过设置位设置/清除寄存器或者输出数据寄存器的值,途经P-MOS管和N-MOS管,最终输出到I/O端口。

当输出数据设置为1时,经过反向器,2处为低电平,则G处为低电平,Us为VDD输入3.3V,
此时Ug <Us,PMOS管导通,out输出引脚被拉高,此时I/O端口的电平就由P-MOS管决定,为高电平。

当输出数据设置为0时,经过反向器,2处为高电平,此时G点位高电平,
此时Ug>Us,NMOS管导通,out引脚输出被拉低,此时I/O端口的电平就由N-MOS管决定,为低电平。

·开漏输出模式

在这里插入图片描述

开漏输出模式

只能输出低电平,不能输出高电平。

由上图可知,P-MOS 管完全不工作。

当输出数据设置为0时,低电平, P-MOS 管关闭,N-MOS 管导通,使输出接地,此时I/O端口的电平就由N-MOS管决定,为低电平。

当输出数据设置为1 (它无法直接输出高电平)时,则 P-MOS 管和 N-MOS 管都关闭,所以引脚既不输出高电平,也不输出低电平,为高阻态。
如果要输出高电平,则需要外接上拉。

高阻态
电路的一种输出状态,既不是高电平,也不是低电平。

电阻高得相当于断路。

当门电路的输出上拉管导通而下拉管截止时,输出为高电平;反之就是低电平;

如上拉管和下拉管都截止时,输出端就相当于浮空(没有电流流动),其电平随外部电平高低而定,即该门电路放弃对输出端电路的控制。
所以高阻态的重要作用之一,I/O(输入/输出)口在输入时读入外部电平用。如上图5,6,7

开漏输出的作用
常用在 I2C、SMBUS 通讯等需要“线与”(一个为低,全部为低)功能的总线电路中。

线与: 当很多个开漏模式引脚连接到一起时,只有当所有引脚都输出高阻态,才由上拉电阻提供高电平,此高电平的电压为外部上拉电阻所接的电源的电压。若其中一个引脚为低电平, 那线路就相当于短路接地,使得整条线路都为低电平,0 伏。

防止短路:
在一些情况下(比如总线), 多个GPIO口可能会连接在同一根线上, 存在某个GPIO输出高电平, 另一个GPIO输出低电平的情况. 如果使用推挽输出, 你会发现这个GPIO的VCC和另一个GPIO的GND接在了一起, 这样会造成短路. 如果换成开漏输出呢? VCC和GND多了个电阻, 这样电路就是安全的.所以总线一般会使用开漏输出。在这里插入图片描述

·复用功能推挽输出模式

在这里插入图片描述

复用功能推挽输出模式

复用”是指 STM32 的其它片上外设对 GPIO 引脚进行控制。

此时,输出的高低电平的来源,不再是CPU直接写输出数据寄存器,而是利用片上外设模块的复用功能输出来决定的。

·复用功能开漏输出模式

在这里插入图片描述

复用功能开漏输出模式:

与开漏输出模式相似。

只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。

猜你喜欢

转载自blog.csdn.net/weixin_44291381/article/details/115375592