GPIO详细介绍:(8种模式均有讲解)

首先本文介绍的是stm32的GPIO,是32位单片机与51单片机代表stc89c52rc的8位单片机不同(位主要是指内部数据通道位数),功能要更加全面,资源更加丰富。本文介绍通俗易通有助于理解GPIO结构。

GPIO详细介绍:(8种模式均有讲解)_第1张图片

GPIO:通用输出输入口

介绍一下功能:可配置为8种输入输出模式

输出模式下作用:GPIO口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等.

输入模式下作用:我们可以读取GPIO口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

需要根据功能选择配置GPIO口模式;

引脚电平:一般情况下GPIO口可容纳0V~3.3V,部分引脚可容忍5V(看引脚介绍图中带有FT标志)

GPIO详细介绍:(8种模式均有讲解)_第2张图片

接下来介绍一下GPIO的大概结构:

GPIO详细介绍:(8种模式均有讲解)_第3张图片

我们通过APB2外设总线对GPIO口电平进行接受控制,

(输入输出)寄存器:只用存储要输出电平信号数据,低16位对应着相对的GPIO口,但是驱动能力有限;

由于只有16个GPIO口(编号从0开始到15,总计16)所以寄存器只取低16位有效,用于输出电平信号1为高电平,0为低电平。

驱动器:用于增加信号驱动能力,驱动GPIO输出;

具体结构如下:

以某一位GPIO口为例子;

GPIO详细介绍:(8种模式均有讲解)_第4张图片

红色对应寄存器,蓝色对应为驱动器,棕色对应具体GPIO口。

一个一个介绍:

输入部分也就是上面:

: 输入保护二极管:

GPIO详细介绍:(8种模式均有讲解)_第5张图片

最右边上下保护二极管,主要用于对输入电压限辐,上面接VDD 3.3v,下面接VSS 0v。

1.当输入电压高于3.3v,上方二极管就会被导通流入VDD流出去,而不会进入内部电路,从而起到一个保护作用,避免过高电压对内部电路产生破坏。(过压保护

2.当输入电压相对于VSS还要低(可以有负电压),就会导通下方二极管,从而流入VSS流出去,而不会进入内部电路,从而起到一个保护作用。(低压保护),否则由于外部电压太低,就会从内部电路汲取电流

3.当输入电压在3.3~0V之间就会流入内部电路工作;

简单说明,当元器件在高于或者低于自身工作电压范围都会对其本身元器件产生伤害,具体可搜过压保护和低压保护。

二:上拉电阻,下拉电阻介绍:

GPIO详细介绍:(8种模式均有讲解)_第6张图片

 

介绍:通过程序配置,配置三种输入模式:

1.如果上面导通,下面断开就是(弱)上拉输入模式(IN PULL UP简称:IPU),引脚悬空默认为高电平;

2.如果下面导通,上面断开就是(弱)上拉输入模式(IN PULL DOWN简称:IPD),引脚悬空时,默认为低电平;

3.如果两边都没有导通,就是浮空输入模式(IN_FLOATING);

作用介绍,对于IO口来说输入电平要么是高电平1,要么是低电平0,当我们还没有接输入的时候我们的引脚处于悬空状态,电平情况未知,容易受到外界电平干扰。当我们采用上拉(下拉)时候就可以使单片机IO口悬空时默认为高(低)电平,从而不受外界干扰。

当我们有了一个连续的驱动源,就不需要考虑引脚悬空的状态,否则还会干扰输入电平,这时候就可以选择不接上拉下拉电阻,选择浮空输入模式,*一定要有稳定连续的驱动源,否则不要用浮空输入模式,绝对不能出现引脚悬空的情况。

弱上下拉简单说明,上拉电阻下拉电阻阻值非常高,一般情况下,电流不会走,除非悬空的情况下,它会把电平拉高或者拉低。对应强上拉就是阻值比较小。

三: 施密特触发器

GPIO详细介绍:(8种模式均有讲解)_第7张图片

介绍:对输入电压进行整形,我们虽然输入的时候可能是数字信号但是可能由于输入不稳定的情况会出现,失真的情况。例如下如图:

GPIO详细介绍:(8种模式均有讲解)_第8张图片

那么无法判断到底是高还是低,这时候我们的施密特触发器就会对输入电压进行整形,它有上限和下限。当输入电压>高电平阈值,输出高电平。当输入电压<低电平阈值,输出低电平。相当于一种开关,注意只有高于高电平阈值,和低于低电平阈值才会发生变化,就可以把上面电压整形为标准数字信号如下:

GPIO详细介绍:(8种模式均有讲解)_第9张图片

也可以把阈值说为上限下限都可,这样就可以把输入信号整形的非常好,经过斯密特触发器整形的输入波形,就可以写入输入寄存器,然后通过读取输入寄存器就可以知道某一位IO口的输入高低电平情况。

三:模拟输入和复用功能输入:

GPIO详细介绍:(8种模式均有讲解)_第10张图片

因为ADC接受的需要是模拟信号,所以不要数字信号就需要赶在施密特触发器整形波形之前,把模拟输入接受所以可以看见模拟输入时在施密特触发器之前接受信号。

复用功能输入:某些其他单片机外设需要读取输入IO口的数字信号,比如串口的输入引脚是数字信号,所以要在施密特触发器后面

四:输出模式讲解:

这里不得不介绍一下输出过程!

GPIO详细介绍:(8种模式均有讲解)_第11张图片

我们配置输出的本质是通过配置寄存器也就是这里的输出数据寄存器然后控制输出控制部分进行输出,但是它16位是一个整体部分,我们要一次性赋值,但是中途如果我们要通过控制输出一位怎么办或者我只想操作一位,一方面可以通过按位与或者按位或操作16位进行赋值,另一方面我们可以通过操作上方的未设置/清楚寄存器,我们就可以通过它单独操作输出寄存器的某一位,对他赋值或者清除。然后输出寄存器控制输出控制到MOS管选择。

输出控制根据我们输出寄存器进行选择MOS管的推挽,开漏,或者关闭

MOS管:一种电子开关

GPIO详细介绍:(8种模式均有讲解)_第12张图片

当我们配置模式为

推挽输出模式(OUT_PP):

这种模式下,P-MOS和N-MOS管都有效,

当输出寄存器配置位1,上方P-MOS管导通就输出高电平,

当输出寄存器配置为0,下面的N-MOS导通连接VSS,输出低电平。

这种模式下STM32对IO口有绝对控制权,高低电平都具有很强的驱动能力,所以我们也把这种模式叫做强推输出模式。

开漏模式(OUT-OD):

在这种模式下P-MOS被断开无效,只有N-MOS有效在工作。

当输出寄存器配置位1,上方P-MOS管断开无效,下管N-MOS断开,几乎没有输出呈现高阻态。

当输出寄存器0,下面的N-MOS导通连接VSS,输出低电平。

在开漏模式下只有低电平有输出能力,高电平没有驱动能力。

注意:

1.通常可以作为通信协议的驱动方式,比如I2C等,在多机通信的情况下,这种模式可以避免各个设备的相互干扰。

2.可以输出5v电平信号,不过需要单独在IO口上接上拉电阻至VDD 5v电源,当输出低电平时候,由N-MOS输出低电平,当输出高电平,由外部上拉电阻接至VDD输出5v高电平,用来兼容一些5v设备。

GPIO详细介绍:(8种模式均有讲解)_第13张图片

当P-MOS 和N-MOS选择关闭,也就是没有输出,此时一般是因为选择输入模式,端口电平由外部电平控制也就是上面输入介绍的上拉和下拉。

五:复用模式(复用开漏输出(AF-OP),复用推挽输出(AF-PP))

这种模式下,就是把输出控制权移交给其他片上外设,经过下方所画线移交。

GPIO详细介绍:(8种模式均有讲解)_第14张图片

一般情况下我们很多时候需要把输出控制权交给其他片上外设(定时器等等)的时候就需要配置这种模式。

下面表格是对于所有模式的一个大概总结:

模式名称 性质 特征
浮空输入 数字输入 可读取引脚电平,若引脚悬空,则电平不确定
上拉输入 数字输入 可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
下拉输入 数字输入 可读取引脚电平,内部连接下拉电阻,悬空时默认低电平
模拟输入 模拟输入 GPIO无效,引脚直接接入内部ADC
推挽输出 数字输入 可输出引脚电平,高电平接VDD,低电平接VSS
开漏输出 数字输入 可输出引脚电平,高电平为高阻态,低电平接VSS
复用开漏输出 数字输入 由片上外设控制,高电平为高阻态,低电平接VSS
复用推挽输出 数字输入 由片上外设控制,高电平接VDD,低电平接VSS

其他一些详细寄存器配置建议参考手册。

你可能感兴趣的:(stm32,嵌入式硬件,单片机)