目录
GPIO概述
GPIO功能及特性
GPIO的电路结构
GPIO的工作模式
GPIO是通用输入输出接口(general purpose input/output)的简称主要用于数字量的输入和输出,是微控制器中使用频率最高的外设。它包括以下功能:
1、输出功能:输出高/低电平
通过输出高/低电平,控制继电器、指示灯和蜂鸣器等外围设备。
2、输入功能:读取引脚电平状态
通过读取引脚的电平状态:高电平或低电平,获取按键和各类传感器的信息输入。
3、复用功能
作为片内外设的对外接口。例如,作为串口通信的数据接收引脚和发送引脚。
4、时序模拟
通过改变引脚的高/低电平,模拟各种时序信号,如I2C和 SPI等。
对于STM32微控制器而言,其GPIO外设具备以下的特性:
1、多种工作模式
提供4种工作模式:输入模式、输出模式、模拟模式和复用模式。
2、灵活复用
STM32微控制器内部集成了很多外设,这些外设的对外引脚都是与GPIO引脚复用通过寄存器的配置,可以选择引脚实现GPIO功能还是外设功能。
3、5V电压容限
大部分引脚具备 5V电压容限,可以接受5V电压的输入,方便与5V供电的外围电路连接。具备 5V 电压容限的引脚信息可以通过查阅芯片的数据手册获取。
4、外部中断
每一个 GPIO引脚都具备外部中断能力。
在学习STM32 微控制器的GPIO外设时要注意两个重要的概念:端口和引脚。
1、端口(PORT)
STM32微控制器将GPIO分成了很多个组,每一组称为端口,如GPIOA、GPIOB和GPIOH等。每一组端口可以看成独立的子模块,包括多个引脚,通过多个硬件寄存器(端口寄存器组)来控制引脚的工作模式。
2、引脚(PIN)
引脚对应微控制器的一个管脚,归属于端口,每一组端口最多包含 16个引脚。例如端口GPIOA对应的16个引脚为PA0~PA15,其中PA0表示该端口的第0个引脚也对应STM32F411芯片的第14个管脚。引脚的工作模式由端口寄存器组的对应位控制。
从上面的描述可以看出:端口相当于一个独立的外设子模块,由多个寄存器构成;而引脚则对应微控制器的一个管脚。一个端口可以控制多个引脚,通过对端口寄存器组的配置来设定引脚的工作模式。
STM32F4微控制器的GPIO电路结构如图所示。
整个电路结构由三部分组成:
1、端口寄存器组
图的左边是控制GPIO端口的寄存器组,用于设置该组端口所含引脚的工作模式。这里只展示了三个寄存器:置位/复位寄存器、输出数据寄存器和输入数据寄存器用户通过设置这三个寄存器的内容,并结合驱动电路,就可以在该端口指定的引脚上输出高/低电平或者读取指定引脚的电平状态。
2、输入/输出驱动器
图的中间是输入/输出驱动器。驱动器中包含的门电路、MOS管和触发器等电路元件,可以将输出数据寄存器中的0或1数据转换为引脚上的低电平或高电平,或者将引脚的电平状态转换为输入数据寄存器中的0或1数据。
a.输入驱动器
输入驱动器的主要电路元件是施密特触发器,其电路原理是当输入电压高于正向阈值电压时,输出为高;当输入电压低于负向阈值电压时,输出为低。引脚上的模拟电压经过施密特触发器后,将转换为0或1的数字信号,并存入到输入数据寄存器。
b.输出驱动器
输出驱动器的主要电路元件是一对P-MOS管和N-MOS管两个MOS管的导通和截止由输出数据寄存器控制。根据两个 MOS 管的导通和截止状态,使得引脚具有“推挽输出”和“开漏输出”两种输出类型。
3、引脚电路
图的右边是引脚电路。引脚电路由两组电路元件组成:
(1)保护二极管
保护二极管用于防止外部过高或过低的电压输人芯片。当引脚电压高于 VDDT5 V电压容限)时,上方的二极管导通,将输人电压限制在“VDD_FT+Ud”(Ud表示二极管导通电压);当引脚电压低于VSS时,下方的二极管导通,将输人电压限制在“VSS- Ud”。保护二极管限制了输入电压的范围,防止了不正常电压输入芯片而导致的芯片损坏。
(2)上拉/下拉电阻
上拉/下拉电阻用于设置引脚的默认电压。上拉电阻连接在引脚和电源VDD之间下拉电阻连接在引脚与地VSS之间。上拉/下拉电阻的使能通过寄存器控制:当上拉电阻使能时,引脚的默认电压为高电平;当下拉电阻使能时,引脚的默认电压为低电平。
根据GPIO的电路结构引脚可以分为四种工作模式:
1、输入模式
当我们需要读取引脚的电平状态时,常常使用输入模式。此时,输出驱动器被禁用施密特触发器打开,引脚的电平状态经过施密特触发器转换后,送入到输入数据寄存器对输入数据寄存器的读操作可以获取引脚的电平状态。
根据是否开启上拉/下拉电阻,又可以分成 3 种输入模式:
(1)浮空输入
不使能上拉/下拉电阻。此时,I/O引脚的电平状态不确定,完全由外部输入决定MCU上电复位后,引脚默认的工作模式就是浮空输入。
(2)上拉输入
使能上拉电阻, I/O引脚内部接上拉电阻。如果引脚外部没有信号输入时,默认为高电平。
(3)下拉输入
使能下拉电阻, I/O引脚内部接下拉电阻。如果引脚外部没有信号输入时,默认为低电平。
输入模式下的上拉/下拉电阻在设计电路时比较有用。以按键电路为例,如果按电路自身设计了上拉或下拉电阻,则引脚可以选择工作在浮空输入模式下。如果按键电路自身没有设计上拉或下拉电阻,则可以根据按键电路的设计,使能引脚的上拉/下拉电阻。这样可以减少按键电路的上拉或下拉电阻,起到简化电路的作用。
2、输出模式
当我们需要使用引脚作为数字输出时,常常使用输出模式。此时,输出驱动器启用并配置为推挽类型或开漏类型,施密特触发器打开,可以读取引脚的电平状态。
根据 MOS 管的工作状态,又可以分成两种输出模式:
(1)推挽输出
P-MOS管和N-MOS管轮流工作,可以输出高电平或低电平。当输出数据寄存器的某一位为1时,经过非门后,P-MOS管处于导通状态,N-MOS管处于截止状态,对应的I/O引脚将输出高电平;当输出数据寄存器的某一位为0时,经过非门后,P-MOS管处于截止状态,N-MOS 管处于导通状态,对应的I/O引脚输出低电平。
(2)开漏输出
P-MOS 管一直处于截止状态,只有N-MOS 工作,只能输出低电平。如果输出数据寄存器某一位为0时,N-MOS 管处于导通状态,对应的I/O引脚将输出低电平。如果输出数据寄存器某一位为1时,N-MOS 管处于截止状态。此时,对应I/O引脚的输出电平就不再由输出数据寄存器决定,而是由 I/O引脚外部的上拉或下拉电阻决定。如果没有外部的上拉或下拉电阻,引脚将处于悬空状态。
在输出模式中,推挽输出是最常用的模式,用于指示灯、蜂鸣器、继电器及电机等外用电路的控制。开漏输出则一般用于I2C总线(开漏模式加上拉电阻以实现双向数据通信或者作为电平转换(3.3 V 电压与 5V 电压之间的转换 )。
3、模拟模式
模拟模式主要用于片内模拟外设(A/D、D/A、模拟比较器等)的信号通道。当引脚工作于模拟模式时,施密特触发器被旁路,输出驱动器关闭,上拉/下拉电阻禁能,输入数据寄存器的值恒为0。此时,I/O引脚的功耗较小。因此在工程应用中,常常将没有用到的I/O引脚设置为模拟模式,以减少系统功耗,提高抗干扰能力。
4、复用模式
GPIO引脚的基本功能是数字I/O,而STM32 微控制器片内集成了大量的外设如TIMER 和 UART 等,这些片内外设的外部引脚与 GPIO引脚复用。在复用模式下,引脚的电平状态不再受端口寄存器组的控制,而是由片内外设控制。此时,输出驱动器启用,可以配置为推挽类型或开漏类型;施密特触发器打开,可以读取引脚的电平状态。
片内外设通过多路复用器与GPIO引脚互连,用户可以通过修改多路复用器,重新分配片内外设所映射的I/O引脚。引脚所对应的片内外设复用功能,可以通过查阅芯片的数据手册获取,或者在 CubeMX 软件的引脚分配图中点击对应引脚,在弹出的菜单中将列出该引脚的全部复用功能。