GPIO工作原理

第一章 GPIO工作原理

一:GPIO简介

STM32L431RCT有64个IO,其中有16个在上电复位后用作芯片最小系统信号的输入接口,其余的48个则是通用输入输出接口,即GPIO。
这48个GPIO分为3组,即PAx、PBx、PCx(x=0…15),每个GPIO的复用功能查询相关的数据手册或者本教程之前章节即可知;除此以外,所有的GPIO虽然复用功能都不同,但是其作为GPIO而言,在芯片内部都有着相同的实现电路,用于实现GPIO功能。因此,对于GPIO而言,只需要了解一个GPIO的内部实现电路,就可以知晓所有GPIO的工作原理。
本小节将从GPIO的内部框图出发,带领大家熟悉其内部组成及各自的工作原理,以便大家更好的实现功能,用于对外的控制。

二 :GPIO内部框图

  1. GPIO内部框图介绍

要想使用GPIO,首先就得知道GPIO是怎么工作的,对照图不难分析,整个GPIO内部主要由实现电路、寄存器两部分组成。这里的寄存器就相当于电路的总开关,通过程序代码配置它们后就可以控制实现电路工作,实现电路在寄存器的配置下实现功能,以完成程序代码对GPIO的控制。
GPIO工作原理_第1张图片
图中需要注意的是模拟、复用功能信号的输入、输出,之前有说过,GPIO的复用功能主要是其内部提供了与其他部件的接口,图中信号线则是连接的接口。不难看出,模拟、复用功能信号只是使用了GPIO内部的功能电路将信号输入、输出,因此可得,GPIO的复用只是将内部电路共享而已。

  1. GPIO寄存器介绍

根据之前所说,整个实现电路都是在寄存器的控制下工作的,那么首先就要知道GPIO内部有哪些寄存器。
STM32L431有3组GPIO,每组GPIO都有一组寄存器控制,包含控制寄存器、数据寄存器、置/复位寄存器、复用寄存器。其中控制寄存器又包含端口模式寄存器、端口输出类型寄存器、端口输出速度寄存器、端口上/下拉寄存器共4个寄存器;数据寄存器又包含输入数据寄存器、输出数据寄存器共2个寄存器。所以,一组GPIO共有8个寄存器控制,下面来看其具体功能:

(1) 控制寄存器 ·
模式寄存器:配置GPIO为输入/输出/复用/模拟模式
输出类型寄存器:当GPIO在输出模式下,配置GPIO是推挽/开漏输出 ·
输出速度寄存器:配置GPIO输出速度,有低/中/高/超高速选择
上/下拉寄存器:配置GPIO选择上拉/下拉电阻模式
(2) 复用寄存器
在GPIO复用时需要通过此寄存器配置复用的功能,这里不多赘述。
(3) 数据寄存器 ·
输入数据寄存器:GPIO实现电路会将输入的数据存储到此
输出数据寄存器:往该寄存器写值,GPIO实现电路会将数据输出
(4) 置/复位寄存器
配置该寄存器,输出数据寄存器会整个置位/复位。

三:GPIO的实现电路

了解了相关寄存器,现在将结合寄存器具体讲解实现电路的具体功能。

  1. 实现电路组成

实现电路主要有输入驱动器、输出驱动器、I/O引脚组成。I/O引脚是整个GPIO对外交流的物理通道;输入驱动器内置TTL施密特触发器限制输入信号;输出驱动器则通过双MOS管驱动信号输出。

  1. 实现电路工作模式

GPIO的实现电路有四种工作模式,分别是输入/输出/复用/模拟,配置模式寄存器可以选择相应的工作模式。
如果配置输入模式,则输入驱动器打开工作;
如果配置输出模式,则输出驱动器打开工作;
如果配置模拟模式,则输入/输出驱动器都不工作;
如果配置复用模式,则输入/输出驱动器都工作;

  1. I/O 引脚

不管GPIO工作在何种模式下,都需要通过I/O引脚进行传输,因此,大家首先来了解一下I/O引脚的结构及其对应的功能。这里需要注意的是,当GPIO工作在模拟模式下时,不论输入还是输出,都只使用到I/O引脚;除此以外,大家还需要分清楚此处I/O引脚是GPIO的一部分,和单片机的IO不同。

如图可知,I/O引脚内部包括上、下电阻以及保护二极管,其中上、下拉电阻可以通过上、下拉寄存器配置使用。
GPIO工作原理_第2张图片

  • 保护二极管

由于GPIO工作时输入过大电流超过的话会烧坏芯片,因此需要通过保护二极管限制输入信号电压过大/过小,如图。当电压过大时,二极管导通,此时输入信号电压限制在VDD+0.7V;当电压过小时,二极管导通,此时输入信号限制在VSS-0.7V,以此来防止不正常电压输入。

  • · 上、下拉电阻

当I/O引脚没有信号输入时,此时引脚电平不稳定,因此需要通过上/下拉寄存器控制电路配置使用上、下拉电阻或则不使用,以用来设置I/O默认状态。
如果配置寄存器使用上拉电阻,那么I/O引脚即使没有信号输入/输出,也会默认输入高电平;
如果使用下拉电阻,则是默认输入低电平。
如果都不使用,即配置寄存器为浮空电路,那么输入电平则不稳定。
一般情况下,如果I/O引脚连接的是外部按键,在按键没有按下时I/O引脚状态不稳定,就需要使用上/下拉电阻。

  1. 输入驱动器

当GPIO配置为输入、复用模式时会使用到输入驱动器,使用时内部的TTL施密特触发器打开,输入信号从I/O引脚输入后,由输入驱动器的TTL施密特触发器进行转换,最终到片上外设或者输入数据寄存器,如图
GPIO工作原理_第3张图片
如果模式寄存器配置为输入模式,输入驱动电路则将输入信号送至输入数据寄存器存储;如果模式寄存器配置为复用模式,输入驱动电路则将输入信号送至其他部件电路中,这里不多赘述。

  1. 输出驱动器

当GPIO配置为输出、复用模式时会使用到输出驱动器,输出信号从输出数据寄存器或片上外设送至到输出驱动器,由输出类型寄存器配置双MOS管的工作以及输出速度寄存器配置输出控制的工作,以实现输出驱动器的驱动功能,最终通过I/O引脚输出,如图。
GPIO工作原理_第4张图片

  • MOS管

MOS管由P-MOS、N-MOS组成,可以通过输出类型寄存器控制MOS管工作,选择推挽、开漏输出,以此来提高输出电流的驱动能力。
下面来看一下这几种模式的:

  • 推挽输出

所谓的推挽输出,是一种使用一对参数相同的MOS管,如图中P-MOS、N-MOS,以推挽的方式存在与电路之中。电路工作时,两只对称的开关管每次只有一个导通。
当需要输出高电平时,P-MOS导通、N-MOS关闭,对外输出高电平;如果输出低电平,P-MOS关闭、N-MOS导通,对外输出低电平。
通过推挽输出,输出信号的负载能力和开关速度都会比普通输出由很大提高,输出信号范围是0-3.3V。

  • 开漏输出

所谓的开漏输出,是一种不输出电压,控制输出低电平时引脚接地,控制输出高电平时既不输出高电平,也不输出低电平,为高阻态。
当需要输出高电平时,P-MOS管不工作,N-MOS管关闭,引脚不输出任何电平,呈现高阻态,要想使其能够输出高电平,还需要通过外接上拉电阻的方式才能输出,输出电压就是上拉电阻的电源电压;
当需要输出低电平时,P-MOS管不工作,N-MOS管导通,对外输出低电平;
开漏输出一般用于电平不匹配的场合,比如上拉电阻的电源为5V,则输出电压为5V,而不是推挽输出的3.3V;除此以外还需要注意,使用开漏输出的引脚可以连接到一起,这时候输出的电压则是各自上拉电阻电源电压的“与”,也就是说,如果有一个是接地,那么输出电压则为0V,这种在IIC等需要“线与”的功能电路中使用盛广。

  • 输出控制

除了P-MOS、N-MOS管,输出驱动器还有一个输出控制器,以此控制输出信号的速度。

  • 输出速度寄存器

通过输出速度寄存器可以配置GPIO输出速度为低/中/高/超高,以用于不同场合的使用。

四:GPIO工作原理

经过本小节的学习,想必大家对GPIO内部寄存器、实现电路的功能有了一定的了解,不难得出,要想GPIO实现信号输入、信号输出、复用,就得通过寄存器控制内部的输入驱动器、输出驱动器、I/O引脚得以实现,这里对GPIO的工作原理进行梳理:
要想GPIO实现输入/输出/模拟/复用功能,首先就得通过端口模式寄存器配置工作模式。
如果配置为输入模式,则输入驱动器打开,在此基础之上还需要通过上/下拉寄存器配置I/O引脚的上、下拉电阻,信号从I/O引脚输入到输入驱动器后,直接到达输入数据寄存器;
如果配置为输出模式,则输出驱动器打开,在此基础上还需要通过输出类型寄存器配置输出驱动器为推挽/开漏输出。如果是开漏输出,还需要通过上/下拉寄存器配置I/O引脚的上、下拉电阻才能实现高电平输出,配置好后,往输出数据寄存器写入数据即可输出。输出的数据可由输出速度寄存器配置;
如果配置为复用模式,那么输入/输出驱动器都打开,上/下拉、输出类型、输出速度寄存器都需要配置;除此以外,输入信号经过输入驱动器后直接进入到片上外设,输出信号也是从片上外设直接进入到输出驱动器输出;
如果配置为模拟模式,那么只需要通过上/下拉配置I/O引脚,模拟信号从I/O引脚处直接到达模数转换器,数模转换器的信号也直接从I/O引脚输出;

你可能感兴趣的:(单片机,stm32,gpio)