`
isiqi
  • 浏览: 16487733 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

对通用输入输出GPIO的深入理解

 
阅读更多

一.GPIO简介
I/O(Input/Output)接口是一颗微控制器必须具备的最基本外设功能。通常在ARM里,所有I/O都是通用的,称为 GPIO(General Purpose Input/Output)。每个GPIO端口包含8个管脚,如PA端口是PA0~PA7。GPIO模块支持多个可编程输入/输出管脚(具体取决于与 GPIO复用的外设的使用情况)。GPIO模块包含以下特性:
1)可编程控制GPIO中断
---屏蔽中断发生
---边沿触发(上升沿、下降沿、双边沿)
---电平触发(高电平、低电平)
2)输入/输出可承受5V
3)在读和写操作中通过地址线进行位屏蔽
4)可编程控制GPIO管脚配置:
---弱上拉或弱下拉电阻
---2mA、4mA、8mA驱动,以及带驱动转换速率(Slew Rate)控制的8mA驱动
---开漏使能
---数字输入使能

二.GPIO的各种模式
GPIO管脚可以被配置为多种工作模式,其中有3种比较常用:高阻输入、推挽输出、开漏输出

1. 高阻输入(Input)

点击看大图


图1.1 GPIO高阻输入模式结构示意图


为减少信息传输线的数目,大多数计算机中的信息传输线采用总线形式,即凡要传输的同类信息都在同一组传输线,且信息是分时传送的。在计算机中一般有三组总 线,即数据总线、地址总线和控制总线。为防止信息相互干扰,要求凡挂到总线上的寄存器或存储器等,它的输入输出端不仅能呈现0、1两个信息状态,而且还应 能呈现第三个状态----高阻抗状态,即此时好像它们的输出被开关断开,对总线状态不起作用,此时总线可由其他器件占用。三态缓冲器即可实现上述功能,它 除具有输入输出端之外,还有一控制端。

如图1.1所示,为GPIO管脚在高阻输入模式下的等效结构示意图。这是一个管脚的情况,其它管脚的结构也是同样的。输入模式的结构比较简单,就是一个带 有施密特触发输入(Schmitt-triggered input)的三态缓冲器(U1),并具有很高的输入等效阻抗。施密特触发输入的作用是能将缓慢变化的或者是畸变的输入脉冲信号整形成比较理想的矩形脉冲 信号。执行GPIO管脚读操作时,在读脉冲(Read Pulse)的作用下会把管脚(Pin)的当前电平状态读到内部总线上(Internal Bus)。在不执行读操作时,外部管脚与内部总线之间是隔离的。

2. 推挽输出(Output)

点击看大图


图1.2 GPIO推挽输出模式结构示意图


推挽输出原理:在功率放大器电路中大量采用推挽放大器电路,这种电路中用两只三极管构成一级放大器电路,两只三极管分别放大输入信号的正半周和负半 周,即用一只三极管放大信号的正半周,用另一只三极管放大信号的负半周,两只三极管输出的半周信号在放大器负载上合并后得到一个完整周期的输出信号。

    推挽放大器电路中,一只三极管工作在导通、放大状态时,另一只三极管处于截止状态,当输入信号变化到另一个半周后,原先导通、放大的三极管进入截止,而原 先截止的三极管进入导通、放大状态,两只三极管在不断地交替导通放大和截止变化,所以称为推挽放大器(armjishu.com)。

如图1.2所示,为GPIO管脚在推挽输出模式下的等效结构示意图。U1是输出锁存器,执行GPIO管脚写操作时,在写脉冲(Write Pulse)的作用下,数据被锁存到Q和/Q。T1和T2构成CMOS反相器,T1导通或T2导通时都表现出较低的阻抗,但T1和T2不会同时导通或同时 关闭,最后形成的是推挽输出。在推挽输出模式下,GPIO还具有回读功能,实现回读功能的是一个简单的三态门U2。注意:执行回读功能时,读到的是管脚的 输出锁存状态,而不是外部管脚Pin的状态。

3. 开漏输出(OutputOD)

点击看大图


图1.3 GPIO开漏输出结构示意图


如图1.3所示,为GPIO管脚在开漏输出模式下的等效结构示意图。开漏输出和推挽输出相比结构基本相同,但只有下拉晶体管T1而没有上拉晶体管。同 样,T1实际上也是多组可编程选择的晶体管。开漏输出的实际作用就是一个开关,输出“1”时断开、输出“0”时连接到GND(有一定内阻)。回读功能:读 到的仍是输出锁存器的状态,而不是外部管脚Pin的状态。因此开漏输出模式是不能用来输入的。

开漏输出结构没有内部上拉,因此在实际应用时通常都要外接合适的上拉电阻(通常采用4.7~10kΩ)。开漏输出能够方便地实现“线与”逻辑功能, 即多个开漏的管脚可以直接并在一起(不需要缓冲隔离)使用,并统一外接一个合适的上拉电阻,就自然形成“逻辑与”关系。开漏输出的另一种用途是能够方便地 实现不同逻辑电平之间的转换(如3.3V到5V之间),只需外接一个上拉电阻,而不需要额外的转换电路。典型的应用例子就是基于开漏电气连接的I2C总 线。

4. 钳位二极管
GPIO内部具有钳位保护二极管,如图1.4所示。其作用是防止从外部管脚Pin输入的电压过高或者过低。VDD正常供电是3.3V,如果从Pin 输入的信号(假设任何输入信号都有一定的内阻)电压超过VDD加上二极管D1的导通压降(假定在0.6V左右),则二极管D1导通,会把多于的电流引到 VDD,而真正输入到内部的信号电压不会超过3.9V。同理,如果从Pin输入的信号电压比GND还低,则由于二极管D2的作用,会把实际输入内部的信号 电压钳制在-0.6V左右。

点击看大图


图1.4 GPIO钳位二极管示意图


假设VDD=3.3V,GPIO设置在开漏模式下,外接10kΩ上拉电阻连接到5V电源,在输出“1”时,我们通过测量发现:GPIO管脚上的电压 并不会达到5V,而是在4V上下,这正是内部钳位二极管在起作用。虽然输出电压达不到满幅的5V,但对于实际的数字逻辑通常3.5V以上就算是高电平了 (armjishu.com)。

点击看大图


图1.5 解决开漏模式上拉电压不足的方法


如果确实想进一步提高输出电压,一种简单的做法是先在GPIO管脚上串联一只二极管(如1N4148),然后再接上拉电阻。参见图1.5,框内是芯 片内部电路。向管脚写“1”时,T1关闭,在Pin处得到的电压是3.3+VD1+VD3=4.5V,电压提升效果明显;向管脚写“0”时,T1导通,在 Pin处得到的电压是VD3=0.6V,仍属低电平。

分享到:
评论

相关推荐

    通用输入输出(GPIO)

    ### 通用输入输出(GPIO):深入理解与应用 #### GPIO概述 通用输入输出(GPIO)是微控制器中的一个关键组成部分,负责实现外部设备与处理器之间的数据交互。在LM3S系列微控制器中,GPIO提供了丰富的功能,使开发人员...

    C6678的GPIO输入输出测试代码,基于CCS5.5

    在本文中,我们将深入探讨如何使用CCS 5.5集成开发环境进行C6678 DSP的GPIO(通用输入/输出)输入输出测试。C6678是一款高性能的浮点数字信号处理器,广泛应用于各种领域,如通信、图像处理和计算。GPIO是微控制器和...

    EASYArm1138 GPIO(通用输入输出)例程

    **GPIO(通用输入输出)详解** GPIO,全称为General Purpose Input/Output,是微控制器(MCU)中一种常见的功能接口,用于实现芯片与外部硬件设备的双向通信。在EasyArm1138这款微处理器中,GPIO接口扮演着至关重要...

    TMS320C6748 DSP视频教程-12-1-通用输入输出口 GPIO(1-3).rar

    本教程系列主要针对TMS320C6748 DSP的通用输入输出口(GPIO)进行深入讲解,旨在帮助开发者更好地理解和利用GPIO进行系统设计。 首先,我们来看“12-1-1-通用输入输出口 GPIO-相关例程演示”。在这个部分,教程通过...

    STM32学习手记——GPIO的输入、输出、检测

    在STM32单片机开发过程中,GPIO(通用输入输出)是基础且重要的知识点。STM32的GPIO口可以配置为输入和输出模式,并能够实现对按键状态的检测以及LED灯的控制。本例程提供了如何通过STM32操作GPIO的输入输出模式,...

    定时器(TIM)和通用输入/输出(GPIO) 实现功能:定时器每20ms扫描一次按键,按键配置LED亮灭

    在STM32F103系列的单片机应用中,定时器(TIM)和通用输入/输出(GPIO)是常用的模块之一。这两个模块结合起来,可以实现非常多的实际应用,其中,定时器可以用来实现定时扫描按键,而GPIO可以用来控制LED等设备。 ...

    LPC2131_GPIO_lpc2131proteus_lpc2131GPIO输入输出_

    在本文中,我们将深入探讨基于LPC2131微控制器的GPIO(通用输入输出)功能,以及如何在Proteus仿真环境中实现这些功能。LPC2131是一款基于ARM7TDMI核的微控制器,由NXP(原飞利浦半导体)公司制造,广泛应用于嵌入式...

    GPIO.rar_gpio口测试工具

    GPIO,全称General Purpose Input/Output,中文名为通用输入/输出端口,是微控制器(如Arduino、Raspberry Pi等)和其他嵌入式...在学习和实践中,了解这些知识点将有助于深入理解GPIO的工作原理,并提升硬件开发能力。

    RV1126实现控制GPIO输入和输出【Linux C驱动】.zip

    分析和理解这些代码,有助于深入理解Linux驱动开发和嵌入式系统中的GPIO管理。 总的来说,RV1126的GPIO控制涉及Linux内核驱动程序的编写,需要掌握RISC-V架构、Linux GPIO子系统、中断处理机制等多方面知识。通过...

    GPIO_C语言实现设备GPIO读写操作_GpioRead_GPIO读写_gpio读写_

    在嵌入式系统和物联网(IoT)领域中,GPIO(General Purpose Input/Output)是通用输入输出接口,常用于控制硬件设备的状态,如LED灯、传感器等。本篇文章将详细探讨如何使用C语言实现对GPIO的读写操作,以及涉及的...

    ISE软核MicroBlaze GPIO输入输出测试例程及文档

    【标题解析】:“ISE软核MicroBlaze GPIO输入输出测试例程及文档”这个标题指出,主要内容是关于Xilinx ISE工具中MicroBlaze...通过详细阅读和实践,开发者可以深入理解MicroBlaze的GPIO功能,并将其应用于实际项目中。

    通用输入输出端口芯片资料PPT学习教案.pptx

    总结来说,通用输入输出端口芯片是嵌入式系统设计中的基础元素,理解和熟练掌握GPIO的使用对于任何涉及硬件交互的项目都是至关重要的。MSP430的GPIO特性使其在多种应用中表现出高度的灵活性和功能性,是学习和应用...

    香橙派(orangepi)的GPIO接口wiringOP_zero

    在GPIO(General Purpose Input/Output)接口方面,香橙派提供了多种型号的GPIO库,其中WiringOP_zero是专为 orangepi zero 设计的一个库,它允许用户通过编程来控制GPIO引脚,实现对硬件设备的输入输出操作。...

    全志A20关于GPIO的配置及使用方法

    本文档旨在为开发者提供全志A20平台上GPIO(通用输入/输出端口)的配置与使用指南,帮助他们更好地理解和掌握GPIO的基本原理及其在实际项目中的应用技巧。 #### 1.2 适用范围 本文档适用于全志A20芯片平台下的GPIO...

    GPIO输出实验-单路LED控制

    GPIO是微控制器或嵌入式处理器上的一种通用接口,可以配置为输入或输出,用于与外部设备交互。在这个实验中,目标是学习如何配置GPIO引脚作为输出,并通过它驱动一个LED灯,以实现简单的开关控制。 描述中提到的...

    GPIO输出实验-蜂鸣器控制.zip_GPIO蜂鸣器_GPIO输出实验_gpio编程蜂鸣器_gpio输出蜂鸣器_lpc2378

    在本文中,我们将深入探讨GPIO(通用输入/输出)如何被用于控制蜂鸣器,特别是在一个具体的实验场景中,即“GPIO输出实验-蜂鸣器控制”。这个实验主要涉及使用GPIO来驱动蜂鸣器,通过GPIO接口进行输入、输出操作,...

    ARM7 GPIO LED控制实验高速GPIO与低速GPIO的速度对比

    在嵌入式系统中,ARM7处理器是一种广泛应用的微处理器,尤其在开发板和嵌入式...通过LED和蜂鸣器的控制,你不仅能掌握基本的GPIO操作,还能了解硬件性能对软件设计的影响,这对于嵌入式系统的开发是非常有价值的实践。

    GPIO 控制程序设计与实现

    GPIO(General Purpose Input/Output)是微控制器或其他电子设备中用于通用输入输出的接口,它允许硬件工程师通过编程控制设备的数字信号。GPIO接口在嵌入式系统、物联网设备、智能家居等领域广泛应用,用于控制LED...

    GPIO入门资料

    STM32 GPIO(通用输入/输出)是微控制器中用于控制和监测外部设备的主要接口。在STM32系列中,GPIO的功能强大且灵活,能够适应各种应用需求。GPIO的使用通常涉及配置寄存器、设置I/O模式以及管理数据传输速度。 ...

    GPIO.zip_LM3S GPIO

    在提供的“01 GPIO(通用输入输出)”文件中,可能包含初始化GPIO端口、配置中断、读写GPIO数据寄存器等相关代码。通过这两个例程,开发者可以学习如何初始化GPIO模块,配置端口模式,以及处理输入和输出事件。同时,...

Global site tag (gtag.js) - Google Analytics