一引言
(资料图)
通用输入/输出(GPIO)是一种常见的硬件接口,在单片机中起着至关重要的作用。它们允许单片机与外设进行数字/模拟信号的交互,用于连接各种外设、传感器、执行器以及其他数字/模拟电路。
本文将简要介绍单片机GPIO的结构及配置方法,以帮助大家更好地理解和使用这一重要的功能和接口。
二GPIO基本结构
一个标准GPIO端口一般由输入数据寄存器、输出数据寄存器、上/下拉电阻、上/下MOS管、复用功能输入/输出、模拟输入/输出以及保护二极管等几部分组成。
图:GPIO基本结构
图:单片机标准I/O端口位的基本结构
1、保护二极管
引脚上最外侧的两个保护二极管可以将引脚外部过高或过低的电压进行钳位,如下图所示:
当引脚电压高于VDD_FT 或VDD 时,上方的二极管导通吸收高电压;
当引脚电压低于VSS 时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。
I/O pin是受保护的节点。当该点电压超过VDD+VD1(典型如0.7V)时,上面的二极管导通。而当该点电压小于-VD2(典型如-0.7V)时,下面的二极管导通。
因此,该点电压会被钳制在VDD+VD1到-VD2之间。
图:GPIO内部保护二极管
2、上下拉电阻
上下拉电阻的作用是为了提供一个默认的稳定电平,使引脚在未连接外部设备时能够保持确定的电平状态。
(1)上拉电阻:当一个GPIO引脚被配置为上拉时,上拉电阻被连接到高电平,确保在引脚未连接到任何外部设备时,引脚的电压为高电平。
(2)下拉电阻:与上拉电阻相反,下拉电阻在一个GPIO引脚被配置为下拉时,确保引脚在未连接外部设备时保持低电平状态。
GD32F4系列单片机的上下拉电阻设计与GD32F3系列设计有所变更,如下图所示:
图:GD32F3系列单片机GPIO内部上/下拉电阻位置
图:GD32F4系列单片机GPIO内部上/下拉电阻位置
两者的主要区别是GD32F4系列单片机将上/下拉电阻移至IO口最外侧,无论输出还是输入模式,都可以被配置。而GD32F3系列单片机的上/下拉电阻在输入驱动部分。
(1)改动好处:GPIO引脚的状态更加稳定;
(2)改动缺点:若单片机配置为了输出模式,GPIO配置时还打开了上/下拉电阻,那么芯片在配置为高/低电平时内部会一直通过下/上拉电阻产生漏电流。
图:输出模式与上/下拉电阻配置冲突时的漏电路径
对于功耗比较敏感的应用场景:被配置为输出模式的引脚,不应打开其上/下拉电阻,应将之配置为浮空;
对于稳定性要求高于功耗的应用场景:被配置为输出模式的引脚,可根据外部连接情况进行上/下拉电阻的配置。
3、上/下MOS管
MOS管在GPIO引脚内部起着开关、电平转换和保护等多种功能。它们通过控制电流的通断来实现不同的功能,提供了灵活和可靠的控制能力,使GPIO引脚能够与外部设备进行有效的交互和通信。
当GPIO被配置为输出模式时,线路经过输出控制缓冲器到一个由P-MOS和N-MOS组成的双MOS电路。
而GPIO引脚则可配置为推挽和开漏两种输出模式;
图:GPIO内部上/下MOS管
(1)推挽输出:
GPIO输出高电平时,PMOS导通、NMOS截止;
GPIO输出低电平时,NMOS导通、PMOS截止;
GPIO高低电平切换,两个MOS轮流导通,提高灌电流和拉电流能力;
(2)开漏输出:
无论GPIO输出高/低电平,PMOS始终保持关闭;
NMOS导通时,GPIO输出为低电平;
NMOS截止时,GPIO引脚状态为高阻态,引脚电平依靠外部上拉电阻拉高
开漏输出模式的典型应用场景为I2C总线;
4、输入数据寄存器
GPIO口的输入信号经过上下拉电阻、TTL施密特触发器引入。当信号经过TTL施密特触发器后,输入信号将变为数字信号0 或1,然后存储在输入数据寄存器中,处理器通过读取“输入数据寄存器”就可以获取IO口电平状态;
即对端口输入数据寄存器进行读操作,将获取当前I/O口的状态;
图:GPIO内部输入数据寄存器
5、输出数据寄存器
输出数据寄存器是双MOS管结构电路的输入控制信号,由GPIO“输出数据寄存器GPIOx_OCTRL”提供;
对端口输出数据寄存器进行读操作,将返回上次写入的值。
图:GPIO内部输出数据寄存器
6、复用功能
GPIO的复用功能使得一个GPIO引脚可以根据具体的需求配置为不同的功能。这在设计和开发中非常有价值,可以最大限度地利用有限的引脚资源,并实现多种功能和接口的扩展。
单片机一般会提供多个功能复用的GPIO引脚。这些引脚可以被配置为具有不同的功能,例如UART、SPI、I2C、PWM等。用户可以通过配置相关寄存器或开关,选择将GPIO引脚用于特定的功能。这样,一个引脚就可以根据需求在不同的功能之间切换。
图:GPIO内部复用功能
7、模拟输入/输出
GPIO模拟输入/输出(GPIO analoginput/output)是使用通用输入/输出引脚(GPIO)来模拟模拟信号的输入和输出功能。
图:GPIO内部模拟输入/输出部分
三GPIO配置说明
GPIO的配置通常通过对相关寄存器的设置来实现。
GPIO模式可分为四种:GPIO输入模式、GPIO输出模式、AF模式(即复用)以及模拟模式。
下图为GD单片机代码中四种GPIO模式的名称:
GPIO_MODE_INPUT:即GPIO输入模式
GPIO_MODE_OUTPUT:即GPIO输出模式
GPIO_MODE_AF:即GPIO复用模式
GPIO_MODE_ANALOG:即GPIO模拟模式
图:代码中4种GPIO模式的定义
1、GPIO输入模式
图:GPIO输入模式寄存器配置表
GPIO输入模式配置只需如下一行代码即可。
配置函数为gpio_mode_set:
(1)参数1:GPIO组,如GPIOA
(2)参数2:GPIO模式,此处配置为输入模式
(3)参数3:输入模式下的IO配置,包括GPIO_PUPD_NONE(浮空模式,无上下拉电阻)、GPIO_PUPD_PULLUP(上拉模式,有上拉电阻)、GPIO_PUPD_PULLDOWN(下拉模式,有下拉电阻)三种;
(4)参数3:GPIO编号,如上述配置为GPIO_PIN_2,则代表对PA2进行配置;
2、GPIO输出模式
图:GPIO输出模式寄存器配置表
GPIO输出模式下可配置为推挽和开漏输出两种不同输出类型。
推挽和开漏输出各自可配置:GPIO_PUPD_NONE(浮空模式,无上下拉电阻)、GPIO_PUPD_PULLUP(上拉模式,有上拉电阻)、GPIO_PUPD_PULLDOWN(下拉模式,有下拉电阻)三种状态。
GPIO输出模式配置需要如下两行代码:
设置GPIO模式:GPIO_MODE_SET
(1)参数1:GPIO组设置,如GPIOA
(2)参数2:GPIO模式设置,此处应为GPIO_MODE_OUTPUT
(3)参数3:GPIO状态设置,可设置为GPIO_PUPD_NONE(浮空模式,无上下拉电阻)、GPIO_PUPD_PULLUP(上拉模式,有上拉电阻)、GPIO_PUPD_PULLDOWN(下拉模式,有下拉电阻)三种三种状态
(4)参数4:GPIO编号,如上述配置为GPIO_PIN_2,则代表对PA2进行配置;
设置GPIO输出配置:GPIO_OUTPUT_OPTIONS_SET
(1)参数1:GPIO组设置,如GPIOA
(2)参数2:GPIO输出类型,此处GPIO_OTYPE_PP即推挽模式
(3)参数3:GPIO频率设置,可设置GPIO_OSPEED_LEVEL0(2MHZ)、GPIO_OSPEED_LEVEL1(25MHZ)、GPIO_OSPEED_LEVEL2(50MHZ)、GPIO_OSPEED_LEVEL3(MAX)共4档
(4)参数4:GPIO编号,如上述配置为GPIO_PIN_2,则代表对PA2进行配置;
3、AF模式
图:AF模式寄存器配置表
GPIO复用功能可参考芯片手册的AF_MAP,AF0~AF16中即为相应引脚可复用的功能明细。
图:GD单片机AF_MAP表格
AF模式配置需要增加如下一行代码启用复用模式:
启用复用模式:gpio_af_set函数
(1)参数1:GPIO组设置,如GPIOA
(2)参数2:AF复用通道,根据数据手册中的AF MAP,可查到每种通道对应何种复用功能,如SPI对应AF5通道,即设置GPIO_AF_5
(3)参数3:GPIO编号,如上述配置为GPIO_PIN_2,则代表对PA2进行配置;
4、模拟模式
模拟模式对应为单片机的ADC/DAC引脚,配置为模拟模式后,GPIO默认为GPIO_PUPD_NONE,无需配置上下拉;
模拟模式配置需要在gpio_mode_set函数中配置:
配置函数为gpio_mode_set:
(1)参数1:GPIO组设置,如GPIOA
(2)参数2:选择GPIO_MODE_ANALOG
(3)参数3:只可配置GPIO_PUPD_NONE,即浮空输入
(4)参数4:GPIO编号,如上述配置为GPIO_PIN_2,则代表对PA2进行配置;
四总结
GPIO是单片机中的重要功能,允许与外部电路进行数字信号交互。
通过了解GPIO的结构和配置方法,可以更好地控制和使用单片机的输入输出引脚,实现各种应用需求。
编辑:黄飞
标签: