4.1 通用I/O接口基本概念及连接方法

本节利用GPIO编程作为第一个程序入门样例,并以此为基础给出工程框架,阐述基本编程规范。

1. I/O接口的概念

I/O接口即输入/输出(Input/Output)接口,是MCU同外界进行交互的重要通道,MCU与外部设备的数据交换通过I/O接口来实现。I/O接口是一个电子电路,其内有若干专用寄存器和相应的控制逻辑电路构成。接口的英文单词有两个:interface和port。但有时把interface翻译成“接口”,而把port翻译成“端口”,虽然从字面上看,接口与端口有点区别,但在嵌入式系统中它们的含义是相同的。有时把I/O引脚称为接口(Interface),而把用于对I/O引脚进行编程的寄存器称为端口(Port),实际上它们是紧密相连的。因此,有些书中甚至直接称I/O接口(端口)为I/O口。在嵌入式系统中,接口种类很多,有显而易见的人机交互接口,如操纵杆、键盘、显示器;也有无人介入的接口,如网络接口、机器设备接口等。

2. 通用I/O(GPIO)

通用I/O也记为GPIO(General Purpose I/O),即基本的输入/输出,有时也称并行I/O或普通I/O,它是I/O的最基本形式。本书中使用正逻辑,电源(VCC)代表高电平,对应数字信号“1”;地(GND)代表低电平,对应数字信号“0”。作为通用输入引脚,MCU内部程序可以通过端口寄存器获取该引脚状态,以确定该引脚是“1”(高电平)或“0”(低电平),即开关量输入。作为通用输出引脚,MCU内部程序通过端口寄存器控制该引脚状态,使得引脚输出“1”(高电平)或“0”(低电平),即开关量输出。大多数通用I/O引脚可以通过编程来设定其工作方式为输入或输出,称为双向通用I/O。

3. 上拉下拉电阻与输入引脚的基本接法

芯片输入引脚的外部有3种不同的连接方式:带上拉电阻的连接、带下拉电阻的连接和“悬空”连接。通俗地说,若MCU的某个引脚通过一个电阻接到电源(VCC)上,这个电阻被称为“上拉电阻”;与之相对应,若MCU的某个引脚通过一个电阻接到地(GND)上,则相应的电阻被称为“下拉电阻”。这种做法使得悬空的芯片引脚被上拉电阻或下拉电阻初始化为高电平或低电平。根据实际情况,上拉电阻与下拉电阻可以取值范围为1~10kΩ,其阻值大小与静态电流及系统功耗有关。

图4-1所示为一个MCU输入引脚的3种外部连接方式,假设MCU内部没有上拉电阻或下拉电阻,图中的引脚I3上的开关K3采用悬空方式连接就不合适,因为K3断开时,引脚I3的电平不确定。在图4-1中,R1>>R2,R3<<R4,各电阻的典型取值为:R1=20kΩ、R2=1kΩ、R3=10kΩ、R4=200kΩ。

图4-1 通用I/O引脚输入电路3种连接方式

4. 输出引脚的基本接法

作为通用输出引脚,MCU内部程序向该引脚输出高电平或低电平来驱动器件工作,即开关量输出,如图4-2所示,输出引脚O1和O2采用了不同的连接方式驱动外部器件。一种接法是O1直接驱动发光二极管LED,当O1引脚输出高电平时,LED不亮;当O1引脚输出低电平时,LED点亮。这种接法的驱动电流一般为2~10mA。另一种接法是O2通过一个NPN三极管驱动蜂鸣器,当O2引脚输出高电平时,三极管导通,蜂鸣器响;当O2引脚输出低电平时,三极管截止,蜂鸣器不响。这种接法可以用O2引脚上的几个毫安的控制电流驱动高达100mA的驱动电流。若负载需要更大的驱动电流,就必须采用光电隔离外加其他驱动电路,但对MCU编程来说,没有任何影响。

图4-2 通用I/O引脚输出电路

视频讲解