STM32 GPIO 多种输入输出模式详解,一篇文章让你轻松掌握!

一、GPIO 的介绍

GPIO(General-Purpose Input/Output)即通用输入输出端口,是微控制器中最基础、最常用的外设之一。对于 STM32 系列微控制器而言,GPIO 是连接芯片与外部世界的桥梁,它可以根据需求配置成不同的输入或输出模式,从而实现与各种外部设备的通信、控制或数据采集。

STM32 的 GPIO 具有以下特点:

  • 可配置性强:支持多种输入输出模式,满足不同场景需求。
  • 驱动能力多样:部分模式可提供较强的电流驱动能力。
  • 复用功能丰富:同一引脚可复用为 USART、SPI、I2C 等通信接口。
  • 支持中断:部分 GPIO 引脚可配置为外部中断源,用于检测电平变化。
  • 二、输入输出模式的种类

    STM32 的 GPIO 支持多种输入输出模式,主要分为输入模式和输出模式两大类,具体如下:

    (一)输入模式

    1.浮空输入(Floating Input)

    配置为浮空输入时,GPIO 引脚不连接上拉或下拉电阻,电平状态完全由外部电路决定。此时读取引脚电平可能为高或低,取决于外部信号。

    2.上拉输入(Pull-up Input)

    内部集成上拉电阻,引脚默认被拉高到高电平。当外部输入为低电平时,引脚电平被拉低。

    3.下拉输入(Pull-down Input)

    内部集成下拉电阻,引脚默认被拉低到低电平。当外部输入为高电平时,引脚电平被拉高。

    4.模拟输入(Analog Input)

    用于模拟信号输入,此时 GPIO 引脚直接连接到芯片内部的 ADC(模数转换器),用于采集模拟电压信号。

    (二)输出模式

    1.推挽输出(Push-Pull Output)

    由两个 MOS 管组成推挽结构,可输出强高电平和强低电平,驱动能力较强。

    2.开漏输出(Open-Drain Output)

    仅包含下拉 MOS 管,输出低电平时导通,输出高电平时处于高阻态,需要外部上拉电阻才能实现高电平输出。

    3.复用推挽输出(Alternate Function Push-Pull)

    用于外设功能(如 USART、SPI 等)的推挽输出模式,由外设模块控制引脚输出。

    4.复用开漏输出(Alternate Function Open-Drain)

    用于外设功能的开漏输出模式,同样需要外部上拉电阻。

    三、各种模式的应用场景

    不同的 GPIO 模式适用于不同的应用场景,合理选择模式可以提高系统的稳定性和可靠性。以下是各种模式的典型应用场景:

    (一)输入模式应用场景

    1. 浮空输入
    2. 适用于外部电路已提供明确电平的场景,如按键连接到固定电压源。
    3. 示例:读取外部信号状态,但外部信号已具备上拉或下拉能力。
    4. 上拉输入
    5. 最常见的应用是按键输入。当按键未按下时,引脚通过上拉电阻保持高电平;按下按键时,引脚接地变为低电平。
    6. 示例:开发板上的用户按键通常配置为上拉输入模式。
    7. 下拉输入
    8. 与上拉输入相反,适用于外部信号常态为低电平的场景。
    9. 示例:某些开关电路,当开关闭合时引脚接高电平,否则保持低电平。
    10. 模拟输入
    11. 用于采集模拟信号,如温度传感器、光照传感器等输出的连续电压信号。
    12. 示例:使用 STM32 的 ADC 功能读取温度传感器的输出电压,转换为温度值。

    (二)输出模式应用场景

    1. 推挽输出
    2. 适用于需要强驱动能力的场景,如直接驱动 LED、小型继电器等。
    3. 示例:控制 LED 灯的亮灭,输出高电平时 LED 点亮,输出低电平时 LED 熄灭。
    4. 开漏输出
    5. I2C 总线通信:I2C 总线要求使用开漏输出并外接上拉电阻,以实现 “线与” 逻辑和多主设备通信。
    6. 电平转换:通过外接上拉电阻到更高电压(如 5V),实现 3.3V MCU 控制 5V 设备。
    7. 示例:STM32 作为 I2C 从设备时,SDA 和 SCL 引脚通常配置为复用开漏输出模式。
    8. 复用推挽输出
    9. 外设通信接口:如 USART 的 TX 引脚、SPI 的 MOSI 引脚等,需要强驱动能力输出数据。
    10. 示例:配置 GPIO 为 USART 的 TX 引脚,用于发送串口数据。
    11. 复用开漏输出
    12. I2C 总线的 SDA 和 SCL 引脚,需要支持 “线与” 逻辑和高阻态。
    13. 示例:STM32 作为 I2C 主设备时,SDA 和 SCL 引脚配置为复用开漏输出模式。

    四、应用举例

    根据GPIO的基本结构,我们启用GPIO的步骤为:

    1. 启用 GPIO 时钟

    STM32 的外设需要先使能对应的时钟才能工作。LED 连接在 GPIOC 端口,因此需要启用 GPIOC 的时钟:

     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    
    2. 配置 GPIO 引脚模式

    使用GPIO_InitTypeDef结构体配置 LED 引脚为推挽输出模式

     GPIO_InitTypeDef GPIO_InitStructure;
    
     // 配置Pin13为推挽输出
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 推挽输出
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOC, &GPIO_InitStructure);
    
    3. 控制 LED 亮灭

    配置完成后,可通过以下函数控制 LED:

    GPIO_SetBits(GPIOC, GPIO_Pin_13);    // 输出高电平(LED灭)
    GPIO_ResetBits(GPIOC, GPIO_Pin_13);  // 输出低电平(LED亮)

    作者:晨曦学习日记

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 GPIO 多种输入输出模式详解,一篇文章让你轻松掌握!

    发表回复