GPIO功能详述

文章详细介绍了STM32GPIO的工作模式,包括上拉输入、下拉输入和浮空输入,以及开漏和推挽输出。还讨论了模拟功能、保护二极管的作用、施密特触发器的滞回特性,并提到了GPIO的复用功能和输出速度对系统性能的影响。
摘要由CSDN通过智能技术生成

基本框图:

在这里插入图片描述

主要是针对STM32的GPIO来讲的,当然,各家芯片对于IO的设计大差不差,很多知识点都是通用的。将整个GPIO章节拆成以下几个部分来讲:GPIO工作模式(输入、输出、模拟),保护二极管,施密特触发器,复用功能,GPIO输出速度,干货满满,可以认真阅读下~

GPIO工作模式:

在这里插入图片描述

输入

上拉输入

在这里插入图片描述

上拉输入时,IO内部的上拉电阻开启,此时,IO的输入阻抗就是上拉电阻的阻值,内部上拉电阻阻值大概在40k左右,在IO外部无驱动的情况下,IO的输入状态由于上拉电阻的存在,会一直默认为高,如果想要驱动为低,外面所接的负载不能太大,如图所示:
在这里插入图片描述

可以看到,测量的IO的电平状态其实就是测量的P点电压,如果此时Key是断开状态,那么P点电压为VDD。
如果Key闭合,则P点电压由R和Rup决定,分压公式如下:Vp=VDD*R/(R+Rup)
一般来说,我们认为的低电平应该不高于0.1VDD,所以内部上拉电阻应该在负载的十倍以上。

下拉输入

在这里插入图片描述

下拉输入时,内部下拉电阻开启,在IO外部无驱动情况下,默认为低电平,STM32的IO下拉电阻典型值在40K左右。
在这里插入图片描述

如果key断开,P点电压为VSS,如果key闭合,P点电压由R和Rdown决定:Vp=VDD*Rdown/(R+Rdown)
芯片对于高电平的判定,一般来说最好在0.9VDD以上,所以R尽量要小,但也应该要考虑到IO本身能接收的灌电流能力,防止IO被损坏。

浮空输入

在这里插入图片描述

浮空输入,即不接上拉也不接下拉,无外部驱动时IO处于浮空状态,此时,数据输入寄存器读到的值可能为高电平,也可能为低电平。
应用电路中,不被使用的IO配置为浮空输入时,可能由于噪声和累积电荷,也可能产生电流消耗,可以尝试配置成模拟输入。

输出

开漏输出

开漏输出是直接将MOS管的漏极作为输出的电路,开漏分为MMOS开漏和PMOS开漏。NMOS开漏:
MOS管不导通的情况下漏极输出高阻态,导通时漏极输出低电平,要输出高电平需要在漏极输出端加上拉电阻。
PMOS开漏:
PMOS管不导通的情况下漏极输出高阻态,导通时漏极输出高电平,要输出低电平需要在漏极输出端加下拉电阻。
在这里插入图片描述

一般来说,NMOS开漏使用比较多,芯片用的就是NMOS开漏,此时,上管的PMOS处于截止状态,开漏输出具有线与特性,即只要总线上有一个低电平输出,整条总线的状态就为低电平,正是由于这种特性,开漏输出用在很多总线协议中,例如I2C,ISO7816等。
在这里插入图片描述

推挽输出

在这里插入图片描述

推挽输出既可以输出高电平,也可以输出低电平,当上管PMOS导通,下管NMOS截止,IO输出高电平,当上管PMOS截止,下管NMOS导通,IO输出低电平。

模拟功能

在这里插入图片描述

模拟功能包含模拟输入和模拟输出。配置为模拟功能时:
输出缓冲器被禁止
施密特触发器输入停用,输出强制处理为0(对输入寄存器读访问值为0)
内部上拉和下拉被关闭
IO引脚每个模拟输入功耗变为零(低功耗产品不用的IO可以考虑配置此选项)

保护二极管

在这里插入图片描述
当IO口输入异常电压时,保护二极管保护IO口不受损坏:
当引脚电压高于VDD+0.7V(假定0.7V是该二极管的导通压降)时,上方的二极管导通,此时IO引脚电压被钳位到VDD+0.7V,当引脚电压低于Vss-0.7V时,下方保护二极管导通,此时IO引脚电压被钳位到Vss-0.7V。
PS:不了解的小伙伴可以去b站搜下钳位保护电路原理。

施密特触发器

在这里插入图片描述
施密特触发器是和输入绑定的,配置GPIO为输入模式的时候,可以选择开启施密特触发器或者关闭。
施密特触发器在这个电路中的作用主要是利用了它的滞回特性,通俗易懂的说,开启施密特触发器以后,当芯片引脚接收到一个电平信号,由0V慢慢上升,当上升到1.5V(假设值)被芯片识别为高电平,此时,如果降低电压,则直到1.4V(假设值)以下才会被芯片识别为低电平,即它的上升和下降的门槛电压不同。
开启施密特的好处就是,IO的输入电压在高低电平门限附近时,不会由于信号的小波动就导致读取到的输入电平变化。
复用功能输入/输出

选择复用功能后,IO的状态不由IO的输入/输出寄存器控制,而是由对应选择的外设来控制。

GPIO输出速度

GPIO的引脚驱动速度有2MHz,10MHz,50MHz,这个指的是IO的驱动电路的响应速度,也就是GPIO输出信号的带宽。

从数据手册上来理解下GPIO的引脚驱动速度是如何定义出来的:

信号输出时,高电平/低电平的保持时间至少要大于1/6个周期时间,所以输出的最大频率的受制于上升时间和下降时间。

最大频率2MHz时,上升时间和下降时间为125ns,若为最大频率,上升时间+下降时间占一个周期的2/3:

T = (2*125us)/(2/3) =375us

单个周期时间为375us,那么频率则约为2.6M:
f=1/T≈2.6M
最大速度的定义为2M,上升/下降时间为125us,是符合计算结果预期的。

最大频率的选择根据我们的应用场景来选择,较低的速度可以耗电少,噪声小,较高的速度耗电多,噪声大,为了波形的完整性,最大速度和我们所需要的速度之间还需要再留下些冗余,如果输出速度和配置最大输出速度较为临界的时候(不建议),可以用示波器测量下输出波形是否失真。

以上就是个人对GPIO的一些理解,如果有错误、遗漏或不理解的地方,可以在评论区指正,看到后会重新编辑,提升文章质量,感谢您的阅读~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值