GPIO工作模式

四种输入模式

1.上拉输入模式

引脚连连接有两个保护二极管:
当引脚电压高于VDD时,上方的二极管导通吸收这个高电;当引脚电压低于VSS时下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。
STM32引脚是用来做控制的,不是用来做驱动的。
输入数据寄存器是由IO口经过上下拉电阻、施密特触发器,模拟信号将变为数字信号0/1,然后存储再输入数据寄存器中,通过读取输入数据寄存器IDR就可以知道IO口的电平状态。
输出数据寄存器,用于存放电平输出值。
通过修改ODR寄存器的值,就可以修改GPIO引脚的输出电平。而设置/清除寄存器BSRR可以通过修改ODR寄存器的值,影响电路的输出,实现对输出的置位或清除。

当我们将IO引脚配置为上拉输入模式时,上拉电阻部分的开关就会闭合,上拉电阻接入电路。而此时下拉电阻部分的开关不会闭合。
上拉电阻的主要作用是为引脚提供一个默认的高电平输入,即便引脚未连接任何有效的外部信号源。希望IO引脚悬空,外部电路断开时,引脚具有默认的高电平时都可以使用上拉输入模式。
若IO端口输入是低电平,MCU读到的就是低电平。
若IO端口输入的是高电平,MCU读到的是高电平。
若IO端口悬空时,MCU读到的电平是高电平。
例子:当我们设置按键的IO口时,默认松开是高电平,按下按键位低电平,这时我们就应该设置位输入上拉的方式。

2.下拉输入模式

当我们将IO引脚配置未下拉输入模式时,下拉电阻部分的开关就会闭合,下拉电阻接入电路。而上拉电阻则不会接入电路。

下拉电阻的主要作用是为引脚提供一个默认的低电平输入,即便引脚未连接任何有效的外部信号源。
下拉电阻的一端接地,另一端连接到引脚,当引脚悬空时,下拉电阻使引脚电位接近低电平,呈现低电平状态。此时输入数据寄存器就能得到一个稳定的电平信号0,这种设计就避免了引脚处于悬空状态而导致的电平不确定(或者电平的反复横跳)。
当引脚设置为下拉输入模式时:
若IO端口输入是低电平,MCU读到的就是低电平。
若IO端口输入的是高电平,MCU读到的是高电平。
若IO端口悬空时,MCU读到的电平是低电平。
希望IO引脚悬空,外部电路断开时,引脚具有默认的低电平时都可以使用下拉输入模式。

3.浮空输入模式

浮空输入模式代表上、下两个电阻都不会接入电路,那么直接将它们从电路中删除。

此时引脚直接与施密特触发器相连,然后连接到输入数据寄存器,CPU通过读取输入数据寄存器来获取引脚的状态信息。
此时引脚的电平状态完全由外部连接的电路决定,内部没有默认的上拉或下拉机制来设定默认引脚电平。
1.若引脚输入了高电压,高电压直接经过施密特触发器进行整形和抗干扰处理,随后传输至输入数据寄存器,使输入数据寄存器存储为1。这样,当CPU读取输入数据寄存器时,获取到的就是代表高电平

4.模拟输入模式

如果GPIO的引脚用于ADC(模拟转换器,将模拟信号转换为数字信号)电压采集,需要就GPIO引脚设置为模拟输入模式。
从IO口进来的电平不经过TTL施密特触发器,不需要将模拟信号转化为数字信号,直接进入片上ADC外设模块,并且IDR寄存器为空,CPU不能在IDR寄存器上读到引脚状态。(除了ADC和DAC要将IO配置为模拟通道,其他外设功能一律要将IO配置为复用功能模式)。

四种输出模式

1.开漏输出模式

控制器首先将输出值通过设置BSRR寄存器(端口位设置/清除寄存器)和ODR寄存器写入输出电平值。然后,信号通过输出控制电路和N-MOS到达输出端口,形成开漏输出。
开漏输出里,P-MOS管都不工作,当ODR寄存器为0时,N-MOS管导通,输出低电平。
当ODR寄存器为1时,N-MOS管截止,输出脚即不输出高电平,也不输出低电平,为高阻态。
若要在开漏模式下输出高电平,需要在高阻态的情况下,外部接一个上拉电阻。
如果微控制器要输出0,可以从IO口直接输出低电平,但如果微控制器想输出输出高电平,那么如果电路上没有额外加上拉电阻,就不能输出高电平。
开漏输出模式的输出能力比推挽输出的能力弱,在一些对输出电流要求不太高且低功耗的项目中可能用到,开漏输出还可以通过浮空输入的方式完成数据的读入。

2.推挽输出模式

P-MOS和N-MOS管同时工作,微控制器首先将输出值通过BSRR寄存器和ODR寄存器写入输出电平值。然后,信号通过输出控制电路和P-MOS和N-MOS管到达输出端口,形成推挽输出。
当ODR寄存器为1时,P-MOS管导通,N-MOS管截止,对外输出高电平。
当ODR寄存器为0时,P-MOS管截止,N-MOS管导通,对外输出低电平。
如果当切换输入高低电平时,两个MOS管将轮流导通,一个负责拉电流,电流输入到负载一个负责灌电流,负载电流流向芯片,使其负载能力和开关速度都比普通的方式有很大的提高。
微控制器想输出0,IO就输出低电平;微控制器想输出1,IO就输出高电平。

3.复用开漏输出模式

复用开漏输出模式和开漏输出模式的区别在于,一个是从微控制器控制,一个是从外设模块上控制。

4.复用推挽输出模式

同理,推挽输出模式是从微控制器(MCU)控制,复用推挽输出模式是从外设模块控制。
复用推挽模式经常用在串口通信中。

总结

在STM32的引用当中,除了必须要使用开漏输出模式的场合,我们都习惯使用推挽输出模式。
推挽输出模式可以输出强高低电平,适用于连接数字器件;开关速度快,负载能力强
开漏输出只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。适合做电流型的驱动。开漏输出一般应用于I2C通信等需要线与的功能

作者:SanLuncheEE

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 GPIO工作模式详解

发表回复