欢迎光临
我们一直在努力

STM32 GPIO输入输出模式到底有什么区别?一篇文章彻底搞懂浮空、上拉、下拉、推挽、开漏

STM32 GPIO输入输出模式到底有什么区别?一篇文章彻底搞懂浮空、上拉、下拉、推挽、开漏

在这里插入图片描述

1. GPIO是什么?

在STM32开发中,GPIO(General Purpose Input Output)是最基础也是最常用的外设之一。

GPIO中文名称:

通用输入输出接口

简单来说,GPIO就是STM32芯片与外部世界连接的“窗口”。

通过GPIO可以实现:

  • 读取外部传感器信号
  • 检测按键状态
  • 控制LED灯
  • 驱动继电器
  • 输出PWM波形
  • 连接UART、SPI、I2C等通信接口

例如:

GPIO作为输入

按键连接:

3.3V

|
按键

|
GPIO ——

|
GND

STM32通过读取GPIO电平判断:

按下 → GPIO=0

释放 → GPIO=1

GPIO作为输出

控制LED:

STM32 GPIO

|

LED

|

GND

GPIO输出高低电平控制LED亮灭。


2. STM32 GPIO内部结构

STM32的GPIO并不是一个简单的开关,而是内部包含:

  • 输入缓冲器
  • 输出驱动器
  • 上拉电阻
  • 下拉电阻
  • 多路复用器
  • 模拟开关

内部结构简化:

STM32内部

输入
|
|
外部引脚 —- GPIO
|
|
输出

|
复用功能选择

|

UART / SPI / I2C / PWM

因此一个GPIO引脚可以有多个身份:

例如STM32的PA9:

普通GPIO:

PA9
|
输出高低电平

复用:

PA9
|
USART1_TX
|
串口发送数据


3. STM32 GPIO有哪些模式?

STM32 GPIO主要分为四大类:

输入模式

  • 浮空输入
  • 上拉输入
  • 下拉输入
  • 模拟输入
  • 输出模式

  • 推挽输出
  • 开漏输出
  • 复用模式

    连接内部外设:

    • USART
    • SPI
    • I2C
    • TIM

    模拟模式

    用于:

    • ADC采样
    • DAC输出

    结构如下:

    GPIO

    |

    ┌───────────────┼───────────────┐

    输入 输出 复用

    Floating Push-Pull USART

    Pull-up Open-Drain SPI

    Pull-down I2C

    |

    Analog

    |

    ADC


    4. GPIO输入模式详解

    4.1 浮空输入(Floating Input)

    浮空输入表示:

    GPIO内部没有连接上拉或者下拉电阻。

    结构:

    GPIO

    |

    |

    外部信号

    特点:

    GPIO电平完全由外部决定。

    例如:

    外部输入:

    3.3V

    GPIO=1

    输入:

    0V

    GPIO=0

    但是如果:

    GPIO没有连接任何东西:

    GPIO = ?

    可能:

    • 0
    • 1
    • 不稳定跳变

    原因:

    引脚处于高阻状态,很容易受到:

    • 电磁干扰
    • 噪声
    • 电荷影响

    应用:

    适合:

    • 外部已经提供稳定电平的信号

    例如:

    传感器输出:

    传感器

    |

    GPIO


    5. 上拉输入(Pull-Up Input)

    上拉输入:

    内部通过电阻连接到3.3V。

    结构:

    3.3V

    |

    电阻

    |

    GPIO ——–

    |

    按键

    |

    GND

    没有按键:

    GPIO被拉高:

    GPIO=1

    按键按下:

    GPIO接地:

    GPIO=0

    典型应用:

    按键检测

    程序:

    if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0)
    {
    //按键按下
    }

    优点:

    • 默认状态确定
    • 不容易受到干扰

    6. 下拉输入(Pull-Down Input)

    下拉输入:

    内部电阻连接到GND。

    结构:

    GPIO

    |

    |

    电阻

    |

    GND

    默认:

    GPIO=0

    输入高电平:

    GPIO=1

    应用:

    例如:

    检测外部触发信号。

    没有信号:

    GPIO=0

    收到信号:

    GPIO=1


    7. GPIO输出模式

    STM32主要有两种输出:

    • 推挽输出
    • 开漏输出

    8. 推挽输出(Push-Pull)

    推挽输出是STM32最常用输出方式。

    内部结构:

    3.3V

    |

    PMOS

    |

    GPIO ——–●

    |

    NMOS

    |

    GND

    输出高电平

    PMOS打开:

    3.3V

    |

    GPIO

    GPIO输出:

    1

    输出低电平

    NMOS打开:

    GPIO

    |

    GND

    GPIO输出:

    0

    特点:

    优点:

    • 输出能力强
    • 速度快
    • 电平稳定

    缺点:

    多个设备不能直接连接。

    应用:

    LED控制

    GPIO

    |

    LED

    |

    GND

    PWM输出

    例如:

    • 电机控制
    • 舵机控制

    9. 开漏输出(Open Drain)

    开漏输出内部只有NMOS管。

    结构:

    3.3V

    |

    上拉电阻

    |

    GPIO ——-

    |

    NMOS

    |

    GND

    输出低:

    NMOS导通:

    GPIO=0

    输出高:

    NMOS关闭:

    GPIO悬空

    因此:

    开漏输出必须:

    外接上拉电阻。


    10. 为什么I2C使用开漏输出?

    I2C总线:

    3.3V

    |

    上拉电阻

    |

    SDA —————-

    |

    多个设备

    原因:

    多个设备可以共享一根线。

    如果设备A:

    拉低:

    SDA=0

    设备B:

    释放:

    不影响

    这样可以避免:

    两个设备同时输出高低电平造成短路。

    因此:

    I2C:

    必须开漏输出


    11. 推挽输出和开漏输出区别

    项目推挽输出开漏输出
    输出高电平 主动输出 需要上拉
    输出低电平 主动输出 主动拉低
    驱动能力
    速度
    是否适合多设备
    常用场景 LED/PWM I2C通信

    简单记忆:

    需要驱动负载

    选择推挽

    需要多人共享总线

    选择开漏


    12. GPIO复用模式(Alternate Function)

    GPIO不仅可以普通输入输出。

    还可以连接内部外设。

    例如:

    PA9:

    普通模式:

    GPIO输出

    复用模式:

    PA9

    |

    USART1_TX

    |

    串口发送

    常见复用:

    GPIO功能
    USART_TX 串口发送
    USART_RX 串口接收
    SPI_SCK SPI时钟
    I2C_SDA 数据线
    TIM_CH PWM输出

    13. GPIO模式如何选择?

    实际开发中可以按照下面选择:

    读取信号

    例如:

    • 按键
    • 传感器

    选择:

    输入模式

    上拉/下拉


    控制设备

    例如:

    • LED
    • 继电器
    • 蜂鸣器

    选择:

    推挽输出


    通信总线

    例如:

    • I2C
    • SMBUS

    选择:

    开漏输出


    使用内部外设

    例如:

    • UART
    • SPI
    • PWM

    选择:

    复用模式(AF)


    14. 总结

    STM32 GPIO虽然看起来简单,但是里面包含大量硬件设计。

    重点记忆:

    输入:
    看外部电平

    输出:
    看驱动能力

    推挽:
    主动输出高低电平

    开漏:
    只能主动拉低,需要上拉

    通信:
    优先考虑复用功能

    掌握GPIO模式,是学习STM32:

    • UART通信
    • I2C通信
    • SPI通信
    • PWM控制
    • ADC采集

    的基础。

    对于嵌入式开发来说,GPIO不仅是“控制一个IO口”,更是理解MCU内部硬件结构的重要入口。

    赞(0)
    未经允许不得转载:171主机测评 » STM32 GPIO输入输出模式到底有什么区别?一篇文章彻底搞懂浮空、上拉、下拉、推挽、开漏
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址