GPIO输出模式的区别

推挽输出、开漏输出和上拉输入或浮空输入的区别(以一个IO口控制两个LED灯为例)
在进行1个IO口控制两个LED灯的实验前,先了解一下GPIO的特性(以STM32为例)

一、推挽输出与开漏输出的区别
1.推挽输出
推挽输出,顾名思义就是既可以输出高电平,又可以输出低电平。以stm32为例,stm32官方手册的GPIO电路图如下:
在这里插入图片描述
当输出寄存器为1时(高电平),控制输出为1,此时P-MOS管导通,N-MOS管不导通,这时候输出电压就以VDD为基准;

控制输出为0时,P-MOS不导通,N-MOS管导通,这时候电压就以VSS为基准。

PS:(MOS知识自己去百度学习学习,MOS管是电压驱动型的,和电流驱动型的三极管不一样,如若不清楚,在这里可以将P-MOS管假想为NPN,N-MOS假想为PNP,这样就比较好去理解这个电路)

       VDD ,D==device器件的意思,指的是器件内部的工作电压

       VSS, S==series公共端的意思,通常电路中的公共端接地,即为地端电压

        VCC,C==Circuit电路的意思,指整个供电回路的电压,(接入电路的电压)

        VBAT,BAT==battery电池的意思,一般指电池电压。

注意:从上面电路图来看,输出的同时,也可以通过输入数据寄存器查看端口的电平变化,但是该电平不一定是你当前输出的电平值

  2.开漏输出
     开漏输出,即只能输出低电平,输出高电平时需要外接上拉电阻。(在stm32F4中,大部分GPIO口都配置了弱上拉和下拉),但在使用其他芯片的时候,在设计电路的时候就要得注意了。

     从上图可以看出,输出寄存器中的“0”,可以激活N-MOS管,而输出"1"时,P-MOS管不导通,会使端口保持高阻态(PS:高阻态顾名思义就是电阻很大,或者说是趋向无穷大。在上面说的推挽输出中,一个门电路中通过上拉管和下拉管来输出高低电平,如果当上拉管和下拉管都截止时,输出端就相当于浮空(没有电流流动),其电平随外部电平高低而定,即该门电路放弃对输出端电路的控制,这样的话,外接上拉电阻,则输出高电平时,其电平由VCC直接供给)。

     由于内部VDD的电压是要比VCC的电压要低(可能低很多),推挽输出时,其输出高电平电流值是比较小的,而接了上拉电阻的开漏输出高电平时,其输出电流是比较大的,因而开漏输出比较适合用来做大电流控制。



二、输入模式
       stm32中输入模式有四种,即浮空输入、上拉输入、下拉输入、模拟输入,在本文中,只讲解浮空输入和上拉输入这两种模式。

      1.浮空输入
         浮空输入顾名思义就是无上下拉,从下面原理图进行分析

在这里插入图片描述
浮空输入时,输入的电压通过TTL施密特触发器转换为0或1的数字电平存入寄存器中。由于该电压是外部提供的,所以会有很多不稳定的因素,那么stm32如何判断该输入电压是高电平还是低电平呢?

下图示从stm32f407的芯片手册中截取到的图,是使用外部时钟源(一般都使用外部时钟源)所测出的值,其判断输入高电平信号的电压为0.7VDDVDD(差不多是2.13.3V),低电平信号输入电压是VSS0.3VDD(0~0.9V)。 那么0.30.7VDD这一部分输入电压怎么办???顾名思义,这一部分是属于浮空的,即无任何信号产生(所以在写浮空输入的程序时,注意ifelse了)
在这里插入图片描述
2. 上拉输入
上面我们讲到浮空输入中,0.3VDD~0.7VDD这一部分输入电压会被认为是无信号产生,那么在配置成上拉输入模式后(上拉电阻开启),其这一部分被认为无信号的输入电压,就会被拉高到0.7VDD+,这样就会产生一个结果,就是符合低电平的输入电压产生的低电平信号,剩下的电压产生的是高电平信号。(当然要注意电压勿超过设定值导致被击穿)。

三、一个IO口控制两个灯的亮灭
为了加深对上面的理解,下面进行一个小实验,即设计一个电路,只用一个IO口同时控制两个LED(单独亮灭,同时亮灭)
在这里插入图片描述
电路分析:这是一个简单的控制电路,其IO口控制的原理是,RC0输入低电平时,LED6亮,输入高电平时,LED7亮,将RC0配置成输入 模式后(高阻态),两个灯都是灭的状态。给1ms左右(这个值根据不同LED的特性来判断)的高低电平交互,可以达到一个同时亮的效果。(二极管是防止电压过高而被击穿)。

当然,这样结果的成立条件是该IO能配置成推挽输出模式(或者开漏模式+外接上拉电阻),这样当要单独使LED7亮时,才能有一个高电平输出(如果芯片电流输出能力过弱,建议外接一个上拉电阻,保证LED7的亮度)

原文链接:https://blog.csdn.net/onClick123/article/details/90606257

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值