
通用输入输出(gpio)介绍.pdf
4页通用输入输出通用输入输出(GPIO)(GPIO)(GPIO)(GPIO)介绍介绍1.1.1.1.GPIOGPIOGPIOGPIO 概述概述概述概述I/O(Input/Output )接口是一颗微控制器必须具备的最基本外设功能在 Stellaris 系列 ARM 里,所有 I/O 都是通用的,称为 GPIO(General Purpose Input/Output) GPIO 模块由 3~8 个物理 GPIO 块组成,一块对应一个 GPIO 端口(PA、PB、PC、PD、PE、PF、PG、PH) 每个 GPIO 端口包含 8 个管脚,如 PA 端口是 PA0~PA7GPIO 模块遵循 FiRM (Foundation IP for Real-Time Microcontrollers)规范,并且支持多达 60 个可编程输入/输出 管脚(具体取决于与 GPIO 复用的外设的使用情况) GPIO 模块包含以下特性:�可编程控制 GPIO 中断 �屏蔽中断发生 �边沿触发(上升沿、下降沿、双边沿)�电平触发(高电平、低电平) �输入/输出可承受 5V �在读和写操作中通过地址线进行位屏蔽�可编程控制 GPIO 管脚配置: �弱上拉或弱下拉电阻 �2mA、4mA、8mA 驱动,以及带驱动转换速率(Slew Rate)控制的 8mA 驱动�开漏使能 �数字输入使能2.2.2.2.各种模式下的各种模式下的各种模式下的各种模式下的 GPIOGPIOGPIOGPIO在 Stellaris 系列 ARM 里,GPIO 管脚可以被配置为多种工作模式,其中有 3 种比较常 用:高阻输入、推挽输出、开漏输出。
2.12.12.12.1 高阻输入高阻输入(Input)(Input)(Input)(Input)图 1 GPIO 高阻输入模式结构示意图如图 1 所示, 为 GPIO 管脚在高阻输入模式下的等效结构示意图 这是一个管脚的情况, 其它管脚的结构也是同样的输入模式的结构比较简单,就是一个带有施密特触发输入 (Schmitt-triggered iinput)的三态缓冲器(U1) ,并具有很高的输入等效阻抗施密特触发输入的作用是能将缓慢变化的或者是畸变的输入脉冲信号整形成比较理想的矩形脉冲信号 执行 GPIO 管脚读操作时,在读脉冲(Read Pulse)的作用下会把管脚(Pin )的当前 电平状态读到内部总线上(Internal Bus) 在不执行读操作时,外部管脚与内部总线之间是隔离的2.22.22.22.2 推挽输出推挽输出(Output)(Output)(Output)(Output)图 2 GPIO 推挽输出模式结构示意图如图 2 所示,为 GPIO 管脚在推挽输出模式下的等效结构示意图U1 是输出锁存器, 执行 GPIO 管脚写操作时,在写脉冲(Write Pulse)的作用下,数据被锁存到 Q 和/Q。
T1 和 T2 构成 CMOS 反相器,T1 导通或 T2 导通时都表现出较低的阻抗,但 T1 和 T2 不会同时导通或同时关闭,最后形成的是推挽输出在 Stellaris 系列 ARM 里,T1 和 T2 实际上 是多组可编程选择的晶体管,驱动能力可配置为 2mA、4mA、8mA,以及带转换速率(Slew Rate)控制的 8mA 驱动在推挽输出模式下,GPIO 还具有回读功能,实现回读功能的是一个简单的三态门 U2注意:执行回读功能时,读到的是管脚的输出锁存状态,而不是外 部管脚 Pin 的状态2.32.32.32.3 开漏输出开漏输出(OutputOD)(OutputOD)(OutputOD)(OutputOD)图 3 GPIO 开漏输出结构示意图如图 3 所示,为 GPIO 管脚在开漏输出模式下的等效结构示意图开漏输出和推挽输 出相比结构基本相同,但只有下拉晶体管 T1 而没有上拉晶体管同样,T1 实际上也是多组可编程选择的晶体管开漏输出的实际作用就是一个开关,输出“1”时断开、输出“0” 时 连接到 GND(有一定内阻) 回读功能:读到的仍是输出锁存器的状态,而不是外部管脚 Pin 的状态。
因此开漏输出模式是不能用来输入的开漏输出结构没有内部上拉, 因此在实际应用时通常都要外接合适的上拉电阻 (通常采 用 4.7~10kΩ) 开漏输出能够方便地实现“线与”逻辑功能,即多个开漏的管脚可以直接 并在一起(不需要缓冲隔离)使用,并统一外接一个合适的上拉电阻,就自然形成“逻辑与”关系开漏输出的另一种用途是能够方便地实现不同逻辑电平之间的转换(如 3.3V 到 5V 之间) ,只需外接一个上拉电阻,而不需要额外的转换电路典型的应用例子就是基于开漏 电气连接的 I2C 总线2.42.42.42.4 钳位二极管钳位二极管图 4 GPIO 钳位二极管示意图GPIO 内部具有钳位保护二极管,如图 4 所示其作用是防止从外部管脚 Pin 输入电压 过高或者过低VDD 正常供电是 3.3V,如果从 Pin 输入的信号(假设任何输入信号都有 一定的内阻)电压超过 VDD 加上二极管 D1 的导通压降(假定在 0.6V 左右) ,则二极管D1 导通,会把多于的电流引到 VDD,而真正输入到内部的信号电压不会超过 3.9V同理, 如果从 in 输入的信号电压比 GND 还低,则由于二极管 D2 的作用,会把实际输入内部的信 号电压钳制在-0.6V 左右。
假设 VDD =3.3V,GPIO 设置在开漏模式下,外接 10kΩ上拉电阻连接到 5V 电源, 在输出“1”时,我们通过测量发现:GPIO 管脚上的电压并不会达到 5V,而是在 4V 上下, 这正是内部钳位二极管在起作用虽然输出电压达不到满幅的 5V,但对于实际的数字逻辑通常 3.5V 以上就算是高电平了图 5解决开漏模式上拉电压不足的方法如果确实想进一步提高输出电压, 一种简单的做法是先在 GPIO 管脚上串联一只二极管 (如 1N4148) ,然后再接上拉电阻参见图 5,框内是芯片内部电路向管脚写“1”时,T1 关闭,在 Pin 处得到的电压是 3.3+VD1+VD3 =4.5V,电压提升效果明显;向管脚写 “0”时,T1 导通,在 Pin 处得到的电压是 VD3=0.6V,仍属低电平。












