有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别_推挽复用输出和开漏复用输出-程序员宅基地

技术标签: keil/stm32  推挽输出 开漏输出 复用开漏输出 复用推  

原作者:http://blog.sina.com.cn/s/blog_6ebd49350100pzju.html


有关推挽输出、开漏输出、复用开漏输出、复用推挽输出

以及上拉输入、下拉输入、浮空输入、模拟输入的区别

最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多:

1GPIO_Mode_AIN 模拟输入 
2GPIO_Mode_IN_FLOATING 浮空输入

3GPIO_Mode_IPD 下拉输入 
4GPIO_Mode_IPU 上拉输入
 
5GPIO_Mode_Out_OD 开漏输出

6GPIO_Mode_Out_PP 推挽输出
7GPIO_Mode_AF_OD 复用开漏输出 
8GPIO_Mode_AF_PP 复用推挽输出


对于刚入门的新手,我想这几个概念是必须得搞清楚的,平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但一直未曾对这些做过归纳。因此,在这里做一个总结:

推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。

推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小效率高。输出既可以向负载灌电流,也可以从负载抽取电流推拉式输出级既提高电路的负载能力,又提高开关速度。

详细理解:

有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别

 
如图所示,推挽放大器的输出级有两个(两组放大元件),一个的电流增加时,另一个的电流则减小,二者的状态轮流转换。对负载而言,好像是一个在推,一个在拉,共同完成电流输出任务。当输出高电平时,也就是下级负载门输入高电平时,输出端的电流将是下级门从本级电源经VT3拉出。这样一来,输出高低电平时,VT3 一路和 VT5一路将交替工作,从而减低了功耗,提高了每个管的承受能力。又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。因此,推拉式输出级既提高电路的负载能力,又提高开关速度。

 

开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).

开漏形式的电路有以下几个特点:

1.     利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFETGNDIC内部仅需很下的栅极驱动电流。

2.     一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。上拉电阻的阻值决定了逻辑电平转换的沿的速度 。阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度

3.     OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。

4.     可以将多个开漏输出的Pin,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成与逻辑关系。这也是I2CSMBus等总线判断总线占用状态的原理。补充:什么是“线与”?:

在一个结点(线), 连接一个上拉电阻到电源 VCC  VDD  n  NPN  NMOS 晶体管的集电极 C 或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上, 只要有一个晶体管饱和, 这个结点(线)就被拉到地线电平上. 因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS),晶体管就会饱和, 所以这些基极或栅极对这个结点(线)的关系是或非 NOR 逻辑. 如果这个结点后面加一个反相器, 就是或 OR 逻辑.

其实可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1

关于推挽输出和开漏输出,最后用一幅最简单的图形来概括:

有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别
该图中左边的便是推挽输出模式,其中比较器输出高电平时下面的PNP三极管截止,而上面NPN三极管导通,输出电平VS+;当比较器输出低电平时则恰恰相反,PNP三极管导通,输出和地相连,为低电平。右边的则可以理解为开漏输出形式,需要接上拉。

 

浮空输入:对于浮空输入,一直没找到很权威的解释,只好从以下图中去理解了

有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别

 

由于浮空输入一般多用于外部按键输入,结合图上的输入部分电路,我理解为浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。

上拉输入/下拉输入/模拟输入:这几个概念很好理解,从字面便能轻易读懂。
复用开漏输出、复用推挽输出:可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)
最后总结下使用情况:
在STM32中选用IO模式
(1) 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
(2)带上拉输入_IPU——IO内部上拉电阻输入
(3)带下拉输入_IPD—— IO内部下拉电阻输入
(4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电
(5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能
(6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的
(7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)
(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)

STM32设置实例:

(1)模拟I2C使用开漏输出_OUT_OD,接上拉电阻,能够正确输出0和1;读值时先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以读IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);

(2)如果是无上拉电阻,IO默认是高电平;需要读取IO的值,可以使用带上拉输入_IPU和浮空输入_IN_FLOATING和开漏输出_OUT_OD;
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014688750/article/details/38355871

智能推荐

QT 画板的设计_qt画图板制作-程序员宅基地

文章浏览阅读1.3k次。一 界面效果二源代码1 mainw.h中代码如下#ifndef MAINWINDOW_H#define MAINWINDOW_H#include #include #include #include #include #include #include #include #include #include #include #include #in_qt画图板制作

Typora+PicGo+GitHub图床的搭建和常见问题的个人解决方法_picgo图床github图床搭建上传失败-程序员宅基地

文章浏览阅读1.4k次,点赞4次,收藏17次。Typora+PicGo+GitHub图床的搭建和常见问题的个人解决方法_picgo图床github图床搭建上传失败

C++ 四种强制转换符的区别_强制转化符-程序员宅基地

文章浏览阅读2.5k次。作为四个内部类型转换操作符之一的dynamic_cast和传统的C风格的强制类型转换有着巨大的差别。除了dynamic_cast以外的转换,其行为的都是在编译期就得以确定的,转换是否成功,并不依赖被转换的对象。而dynamic_cast则不然。在这里,不再讨论其他三种转换和C风格的转换。首先,dynamic_cast依赖于RTTI信息,其次,在转换时,dynamic_cast会检查转换的source对象是否真的可以转换成target类型,这种检查不是语法上的,而是真实情况的检查。

【曼哈顿距离】*AcWing727.《菱形》(C++)-程序员宅基地

文章浏览阅读356次,点赞9次,收藏12次。本题来自AcWing第727题《菱形》

Dagger2_dagger2在android studio3.0-程序员宅基地

文章浏览阅读251次。 DaggerDome下载001. 既然打开了这篇文章,那么关于为什么使用Dagger2或者Dagger2的作用就不再多说,我们直接来动手配置Dagger2。 我们只介绍AndroidStudio的配置方法,至于依旧使用Eclipse的同学,请绕道。 我们打开模块的(不是全工程的)build.gradle文件,其内容大致是这个样子:[javascript] view..._dagger2在android studio3.0

设计一个简单的学生信息类_在右侧编辑器中的begin-end之间补充代码,声明并定义一个学生信息类 stinfo,该类有-程序员宅基地

文章浏览阅读1.2w次,点赞5次,收藏79次。设计一个学生信息类一、任务描述本关任务:声明并定义一个学生信息类。二、相关知识为了完成本关任务,你需要掌握类的声明和定义。类在现实世界中,经常有属于同一类的对象。例如,你的自行车只是世界上很多自行车中的一辆。在面向对象软件中,也有很多共享相同特征的不同的对象,可以利用这些对象的相同特征为它们建立一个集合,而这个集合就称为类。C++ 中类是把各种不同类型的数据(称为数据成员)和对数据的操作(成员函数)组织在一起而形成的用户自定义的数据类型。它提供了可重用性的好处。类定义包括声明和实现两大部分。_在右侧编辑器中的begin-end之间补充代码,声明并定义一个学生信息类 stinfo,该类有

随便推点

Delphi Hook K3_spr32x30.ocx-程序员宅基地

文章浏览阅读1.8k次。前述K3工业版插件编程很多K3接口开发人员都有经验,这里提供另外一个思路,采用直接HOOK的形式来进行编程,一样可以实现我们想要的结果 需求1销售出库单中,表头输入客户,当用户在表体输入商品离焦后,检查该商品是否在用户自定义的客户商品对应表中,如无,则给予信息提示2 销售出库单中,加一菜单,有权限的用户点击该按钮可从价格管理库中获取最新单价,并写入到表体单价栏中 分析

如何优化网站内容 内容页 网站内容文本优化-程序员宅基地

文章浏览阅读199次。首先,纯文本链接因为没有超链接,用户不能通过点击直接达到指向的页面,在用户体验上显而易见的不如超链接和链接锚文本。 但是也不能排除用户会通过复制、粘贴进入这个页面。虽然这样的链接被收录后对seo是否有用? 作用又有多大? 蜘蛛是否会顺着爬行? 我们不得而知,但谁也不能完全否认该形式链接存在的作用。再者说,纯文本链接在互联网上遍布着纯在,搜索引擎真的会忽略如此大量的链接存..._文本优化网站

RabbitMQ-程序员宅基地

文章浏览阅读628次。RabbitMQ

安装软件时遇到“不具备管理员权限”的问题,以Vericut安装为例_安装vericut 你不具有管理员权限-程序员宅基地

文章浏览阅读871次,点赞2次,收藏2次。本文旨在说明,如何解决安装软件时遇到,“不具备管理员权限”的问题。这个问题的主要原因是,虽然本地账户已经被升级为Administrator账户类型,但未获取所有管理员权限,需要用Windows自带的管理员账户,一般这个账户名字就是Administrator。接下来的操作步骤就是,将账户切换到Administrator账户,然后右键以管理员身份运行安装程序。在这个操作中可能需要我们自己激活Administrator账户。_安装vericut 你不具有管理员权限

『VulnHub系列』serial: 2-Walkthrough_serial2-程序员宅基地

文章浏览阅读1.8k次。靶机发布日期:2019年9月27日,难度:中等++。用到了apk逆向和ELF中的ROP技术,web狗(小白)表示伤不起,一路硬刚下来的,求鼓励~_serial2

浅谈Tarjan算法-程序员宅基地

文章浏览阅读140次。从这里开始预备知识两个数组Tarjan 算法的应用求割点和割边求点-双连通分量求边-双连通分量求强连通分量预备知识  设无向图$G_{0} = (V_{0}, E_{0})$,其中$V_{0}$为定点集合,$E_{0}$为边集,设有向图$G_{1} = (V_{1}, E_{1})$,其中$V_{1}$为定点集合,$E_...__tarjan72

推荐文章

热门文章

相关标签