http://www.elecfans.com/pld/jiekou_zongxian_qudong/577391.html
文是搬过来的,侵权就删了,原文链接在上面。感谢提供的详细介绍。讲的很通俗易懂。
GPIO是一颗芯片(MCU)必须具备的最基本外设功能。
GPIO通常有三种状态:高电平、低电平和高阻态。高阻态换句话说就是断开状态或浮空态。因此上拉和下拉其中一个强大的理由就是为了防止输入端悬空,使其有确定的状态。减弱外部电流对芯片的产生的干扰。
上拉就是将不确定的信号通过一个电阻提升为高电平,这个上拉的电阻的选择通常有讲究,通常是驱动能力和功耗的平衡,若GPIO为输出为高电平,一般来说,上拉电阻越小,驱动能力越强,但功耗也就越大,同时还要考虑下级电路对驱动能力的要求,上拉电阻选择的合适才能向下级电路提供足够的电流。另外就是数字电路对高低电平都有一个门槛,以上拉电阻为例,输出高电平自然是被拉高,但输出低电平的时候,通常内部的开关管会被导通到地,这必须确保内部导通到地这一段之间的电阻和上拉电阻的比值足够让其电平处在零电平门槛之下。对频率比较高的时候,上拉电阻和开关管漏源级之间的电容和下级电路之间的输入电容会形成“RC延迟”,电阻越大,延迟越大。下拉电阻的选择原理和上拉电阻是一样的。
还有另外两个概念:拉电流和灌电流。这两个名词本是为更形象的表述却意外的让人更加迷惑。要弄清楚这两个概念首先必须以芯片本身为出发点,所谓的拉和灌都是相对芯片本身而言。
拉是芯片主动输出电流,从输出端口输出电流 ,拉电流就是GPIO输出高电平给负载提供的输出电流。
灌是芯片被输入电流,从输出端口灌入,灌电流是输出低电平时外部数字电路输入的电流。
另外还有一个
吸收电流的概念,吸收电流时主动吸入电流,是从输入端口流入,即GPIO被设置为输入状态。 所以拉电流和灌电流通常都是指相对输出而言。
到底是配置成上拉还是下拉呢??
首先 上下拉 是给IO一个默认的状态 比如控制EN的话,那么高有效的我们就下拉,低有效的话我们就上拉
而 很多IO 由于CMOS工艺问题会出现float的现象,所以不能悬空 需要PU PD。
上拉和下拉是指GPIO输出高电位(上拉)还是低电位(下拉)。
上拉就是输入高电平,然后接一个上拉电阻(起保护作用),知道上拉就表示该端口在默认情况下输入为高电平。
下拉就相反了,指输入低电平,然后接一个下拉电阻。
那么,什么是高电平,什么是低电平呢?这是电路方面的知识,百度百科讲的,表示不太懂。
上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。
下拉同理。也是将不确定的信号通过一个电阻钳位在低电平。
不过从程序设计的角度讲,
上拉就是如果没有输入信号则此时I/O状态为1,下拉相反。
具体配置为上拉还是下拉,要看电路图。看外部有没有上下拉电阻。
上拉寄存器是控制对应端口上拉使能的。当对应位为0时,设置对应引脚上拉使能,为1时,禁止对应引脚上拉使能。如果上拉寄存器使能,无论引脚功能寄存器如何设置(输入,输出,数据,中断等),对应引脚输出高电平。可见对应于S3C2410的GPB-BPH口内部有上拉电阻寄存器,当相应的上拉电阻使能时,对应的I/O引脚悬空时,表现出高电平。反之,表现出低电平。
上拉是一个电阻接到一个电压,其实就是增强IO的驱动能力。下拉是一个电阻接到地,保证IO口是低电平。
主要是用在TTL电平和CMOS电平之间的相互驱动上面。TTL电平和CMOS电平的逻辑0和1的定义是不一样的,打个比方,你的IO输出逻辑1时电平是3.3V,而接到IO上的元件的逻辑1是5V,这时就要将这个IO接一个上拉,使该IO的逻辑1能够和其驱动的设备的逻辑1电平相当。具体上拉下拉电阻怎么计算,这要看IO输出的电流是多少,这个电流经过上下拉电阻时会产生一个压降,一般上拉电阻接到的电源电压减去这个压降就是该IO可以被拉到的电平值,要求这个上拉电平值能够达到逻辑1的下限。具体那篇文章可以在论坛里搜索一下。
1、一般作单键触发使用时,如果IC本身没有内接电阻,为了使单键维持在不被触发的状态或是触发后回到原状态,必须在IC外部另接一电阻。
2、数字电路有三种状态:高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻的方式使处于稳定状态,具体视设计要求而定。
3、I/O端口,有的可以设置,有的不可以设置,有的是内置,有的是需要外接,I/O端口的输出类似与一个三极管的C,当C接通过一个电阻和电源连接在一起的时候,该电阻成为上C拉电阻,也就是说,如果该端口正常时为高电平,C通过一个电阻和地连接在一起的时候,该电阻称为下拉电阻,使该端口平时为低电平,作用:比如,当一个接有上拉电阻的端口设为输入状态时,他的常态就为高电平,用于检测低电平的输入。
4、上拉电阻有时是用来解决总线驱动能力不足时提供电流的,一般说法是拉电流;下拉电阻是用来吸收电流的,也就是灌电流。比如有I2C总线使用会上拉一个10k的电阻。
端口选择还应该注意端口的初始的状态。这个状态是系统复位时的状态,是不受上层软件控制的,假如选择的端口正常是高电平有效的,那么应该选一个系统复位时,是下拉状态的端口。