GPIO(General Purpose Input/Output)是“通用输入输出”的缩写,它是微控制器(MCU)或单片机(MCU)、处理器或其他数字电子设备上用来处理各种信号的基本接口。是一种能够配置为不同模式的引脚或端口,用于与外部世界进行交互。能够配置为输入模式或输出模式,以实现不同的功能。
GPIO 的主要特性
可配置性:
- 输入模式:当 GPIO 引脚被配置为输入时,微控制器可以通过该引脚读取外部信号的状态,通常是高电平(1)或低电平(0)。输入模式常用于读取传感器、按键、开关的状态。
- 输出模式:当 GPIO 引脚被配置为输出时,微控制器可以通过该引脚驱动外部设备,如点亮 LED、驱动电机、控制继电器等。
- 双向引脚:大多数 GPIO 引脚既可以作为输入,也可以作为输出,通常通过软件控制配置。
电平高低:
- 高电平(逻辑 1):通常表示接近电源电压(如 3.3V 或 5V)。
- 低电平(逻辑 0):通常表示接近地电压(0V)。
输入/输出电流能力: GPIO 引脚的输入和输出电流能力有限,一般只能驱动较小的负载。如果需要驱动更大的负载(如电机),通常需要使用额外的驱动器件(如晶体管或 MOSFET)。
中断支持: 有些 GPIO 引脚支持中断,当引脚的状态变化(如从高电平变为低电平,或从低电平变为高电平)时,能够触发中断信号,让处理器及时响应。这在按钮按下、传感器信号变化等场景下非常有用。
上拉/下拉电阻: 为了确保输入引脚在未连接任何信号时有稳定的电平状态,GPIO 通常提供内部上拉电阻或下拉电阻。上拉电阻将引脚默认拉到高电平,而下拉电阻将引脚默认拉到低电平。这样可以防止引脚悬空时处于不确定状态。
GPIO 的工作模式
输入模式:
- 功能:读取外部设备的电平状态。
- 应用场景:检测按钮按下/松开、读取传感器数据、检测信号电平。
- 操作:配置 GPIO 为输入模式后,通过读取引脚的值(通常为 0 或 1)来获得外部设备的状态。
输出模式:
- 功能:通过 GPIO 向外部设备输出高电平或低电平信号。
- 应用场景:控制 LED 点亮/熄灭、驱动蜂鸣器、开关继电器等。
- 操作:配置 GPIO 为输出模式后,可以设置引脚为高电平或低电平,控制外部设备。
中断模式:
- 功能:当 GPIO 引脚的电平状态发生变化时触发中断,处理器执行相应的中断服务程序(ISR)。
- 应用场景:按钮按下时触发中断,传感器信号变化时立即响应。
- 操作:配置 GPIO 为中断模式,并指定触发条件(如上升沿、下降沿或电平变化)。
STC8H
在 STC8H 系列单片机中,GPIO(通用输入输出)引脚具有四种主要模式,分别是准双向口模式、推挽输出模式、开漏输出模式和高阻输入模式。
准双向模式
默认状态下引脚处于高电平状态,且引脚内部连接了一个弱上拉电阻,既可以作为输入,也可以作为输出,不需要额外设置方向寄存器。
推挽输出模式
强推挽输出配置的下拉结构与开漏模式以及准双向口的下拉结构相同,但当锁存器为1时提供持续
的强上拉。推挽模式- -般用于需要更大驱动电流的情况。
强推挽引脚配置如下图所示:
开漏输出模式
【开漏工作模式】,对外设置输出为 1,等同于 【高阻输入】
【开漏工作模式】,【打开内部上拉电阻 | 或外部加上拉电阻】,简单等同于 【准双向口】
开漏模式既可读外部状态也可对外输出(高电平或低电平)。如要正确读外部状态或需要对外输出高电平,需外加上拉电阻。
当端口锁存器为 0 时,开漏模式关闭所有上拉晶体管。当作为一个逻辑输出高电平时,这种配置方式必须有外部上拉,一般通过电阻外接到 Vcc。如果外部有上拉电阻,开漏的 I/O 口还可读外部状态,即此时被配置为开漏模式的 I/O 口还可作为输入 I/O 口。这种方式的下拉与准双向口相同。
开漏端口带有一个施密特触发输入以及一个干扰抑制电路。
输出端口配置如下图所示:
高阻输入模式
电流既不能流入也不能流出。通常由三态缓冲器等电路元件实现。
高阻的实现方式
输入缓冲器(双反相器)禁用:
- 电路中的两个反相器通常用于传输输入数据,但如果你将这两个反相器禁用(比如通过控制信号使其不工作),那么该引脚的输入路径就相当于被断开了。
- 当输入缓冲器被禁用时,输入信号将不会传播到引脚,因此引脚没有驱动信号,也不会产生输出。
上拉电阻:
- 该电路中的上拉电阻将引脚连接到 VCC。如果没有其他驱动器作用于引脚,那么引脚会通过上拉电阻保持在高电平状态。
- 如果输入缓冲器禁用,输出逻辑不会控制引脚电平,此时引脚实际上处于高阻态,即无驱动电平的状态。
高阻态定义:
- 高阻态意味着引脚既不输出高电平,也不输出低电平。它就像断开一样,既不会拉高也不会拉低,而是由外部电路(如上拉或下拉电阻)决定引脚的电平状态。
- 在这个电路图中,当输入缓冲器关闭时,引脚处于高阻态,引脚电平由上拉电阻决定,通常会保持高电平。
电气特性:
1、高电阻值:高阻态的管脚电阻极高,这使得通过该管脚的电流非常小,接近于零。这样的特性使得该管脚在电路中的电流驱动能力极弱,对电路中的电流分布影响极小。
2、电平不确定性:处于高阻态的管脚,其电平状态不确定。如果用万用表测量,测量结果可能是高电平,也可能是低电平,具体取决于该管脚后面所连接的电路元件。
内阻非常大,管脚输入电流有轻微波动都能识别到,电压等于电阻乘以电流。如果设为高阻态,当管脚连接的外设驱动能力非常弱,也不会误读电平状态。
问题
一、在进行嵌入式开发中为什么需要多次指定同一个引脚,比如在使用 UART 时,需要 GPIO 和UART 分别指定一次引脚
在嵌入式开发中,可能需要多次指定同一个引脚,例如在使用 UART 时,需要在 GPIO 和 UART 模块中分别进行引脚指定。这是因为引脚的功能配置和电气特性配置是独立的,并且涉及到不同的系统组件。下面详细解释为什么需要这样做,并且解释每个配置的角色和原因。
配置方式
- GPIO 配置: 配置引脚的电气特性,如上拉/下拉电阻、输入/输出模式等。
- 外设配置: 配置引脚用于特定的外设功能,如 UART 的 TX/RX。外设模块需要知道具体的引脚用于什么功能,以便正确地处理信号。
在嵌入式开发中,尽管一个引脚可能在物理上是相同的,但为了实现不同功能(如 GPIO 和 UART),需要在不同的配置阶段分别指定引脚。这是因为 GPIO 配置关注电气特性,而外设配置关注功能模式和功能启用。这种分离允许微控制器的引脚支持多种功能,并确保每种功能能够正常工作。
二、什么是电气特性
在嵌入式系统和单片机开发中,”电气特性”(Electrical Characteristics)指的是引脚在不同工作模式下的电气行为和性能参数。这些特性决定了引脚如何与外部电路交互,并影响其在实际应用中的功能和可靠性。
举个例子,在一个典型的微控制器中,如果你配置一个引脚为输入模式并启用内部上拉电阻,这样可以确保在引脚没有外部信号连接时,它会稳定地保持在高电平。相反,如果配置为输出模式,你可以设置引脚为高电平或低电平,并确保它能够提供足够的电流来驱动连接的设备,如 LED。
简单来说,电气特性指的就是引脚在不同工作模式下的电压和电流相关的参数和行为。这些特性包括了引脚如何表现电压、电流的能力以及它如何响应不同的电气信号。