STM32的GPIO介绍

STM32的GPIO介绍

GPIO简介

GPIO(General Purpose Input/Output,通用输入输出)是STM32单片机最基本、最常用的外设之一,用于与外部设备进行数字信号交互(如控制LED、读取按键、驱动传感器等)。STM32的GPIO具有高度灵活性,支持多种工作模式,并可通过复用功能连接片内外设(如USART、SPI等)。

1. GPIO 主要特性

(1)基本功能

数字输入:读取外部信号(如按键状态)。

数字输出:控制外部设备(如LED亮灭)。

复用功能(AF):将引脚分配给特定外设(如USART_TX、I2C_SCL等)。

模拟输入:部分GPIO可配置为ADC输入或DAC输出。

(2)关键特性

多种工作模式:

输入模式:浮空、上拉、下拉。

输出模式:推挽、开漏。

复用模式:用于外设功能(如SPI、I2C)。

模拟模式:用于ADC/DAC。

可配置速度:支持2MHz~50MHz(影响信号边沿速率)。

中断支持:可配置为上升沿/下降沿/双边沿触发中断。

5V容忍(部分型号):某些引脚可承受5V输入(需查数据手册确认)。

STM32 GPIO 工作模式详解与应用场景 

GPIO(通用输入输出)是STM32最基础且灵活的外设,支持8种工作模式,分为输入模式和输出模式两大类。虽然STM32CubeMX能自动配置外设对应的GPIO模式,但理解这些模式的原理和适用场景对硬件设计、调试和优化至关重要。以下是每种模式的解析:

输入:

这里的IO口和VCC相连,如果按键不按下,IO口的输入就是VCC高电平,如果按键按下IO口就变成了GND低电平,这是一个GPIO输入最简单的例子

输出:

 这里如果IO口输出高电平,就是1,LED灯就亮,如果输出低电平,就是0,LED灯就不亮 

1. 输入模式

(1) 输入浮空模式(GPIO_MODE_INPUT_FLOATING)

原理: 

  输入通道仅通过TTL施密特触发器整形信号,无上拉/下拉电阻,引脚电平完全由外部电路决定。悬空时读取的电平状态不确定(可能受噪声干扰)。 

特点: 

  高阻抗输入,功耗低。 

  抗干扰能力弱,需外部电路保证稳定电平。 

应用场景: 

  外部已自带上下拉的信号(如数字传感器输出)。 

  USART_RX、CAN等通信接口(依赖外部电路电平)。 

(2) 输入上拉模式(GPIO_MODE_INPUT_PULLUP)

原理: 

  内部接入约40kΩ上拉电阻,悬空时默认高电平;外部拉低时电平为低。 

特点: 

  避免悬空时的电平漂移。 

  适合检测低电平有效的信号(如按键接地)。 

应用场景: 

  按键检测(按键一端接地,按下时拉低)。 

  下降沿/低电平触发的中断配置。 

(3) 输入下拉模式(GPIO_MODE_INPUT_PULLDOWN)

原理: 

  内部接入约40kΩ下拉电阻,悬空时默认低电平;外部拉高时电平为高。 

特点: 

  避免悬空时的干扰。 

  适合检测高电平有效的信号。 

应用场景: 

  按键检测(按键一端接VCC,按下时拉高)。 

  上升沿/高电平触发的中断配置。 

(4) 模拟输入模式(GPIO_MODE_ANALOG)

原理: 

  完全关闭数字电路(无施密特触发器、上下拉电阻),信号直接接入ADC/DAC等模拟外设。 

特点: 

  无数字噪声干扰,可读取连续模拟电压。 

  功耗最低(关闭数字部分电路)。 

应用场景: 

  ADC采样(如电位器、温度传感器)。 

  低功耗模式下禁用未使用的GPIO。 

2. 输出模式

(5) 推挽输出(GPIO_MODE_OUTPUT_PP)

原理: 

  通过PMOS和NMOS组成推挽结构,可主动输出高电平(3.3V)或低电平(0V),驱动能力强。 

特点: 

  高低电平驱动电流对称(典型20mA)。 

  输出阻抗低,抗干扰能力强。 

应用场景: 

  驱动LED、继电器、蜂鸣器等。 

  高速信号(如SPI_CLK、PWM输出)。 

 (6) 开漏输出(GPIO_MODE_OUTPUT_OD)

原理: 

  仅NMOS可导通,输出低电平时拉低,输出高电平时为高阻态(需外接上拉电阻)。 

特点: 

  - 支持“线与”逻辑(多设备共享总线)。 

  - 高电平由外部上拉电阻决定(可兼容5V设备)。 

应用场景: 

  - I2C总线(SDA/SCL)。 

  - 电平转换(如3.3V与5V设备通信)。 

3. 复用功能模式

 (7) 复用推挽输出(GPIO_MODE_AF_PP)

原理:  

  引脚作为外设功能(如USART_TX、SPI_MOSI),输出特性与普通推挽相同。 

应用场景: 

  外设需强驱动能力的场景: 

   USART_TX(确保信号完整性)。 

   PWM输出(驱动电机控制信号)。 

(8) 复用开漏输出(GPIO_MODE_AF_OD)

原理: 

  引脚作为外设功能,输出特性与普通开漏相同。 

应用场景: 

  外设需总线共享或电平转换的场景: 

   I2C(支持多主设备冲突检测)。 

    SMBus(兼容不同电压设备)。 

4. 模式选择对比表

模式

电平特性

驱动能力

典型应用

输入浮空

由外部决定,悬空不稳定

USART_RX、数字传感器

输入上拉

默认高,外部可拉低

按键(接地触发)

输入下拉

默认低,外部可拉高

按键(接VCC触发)

模拟输入

直接接入ADC

电位器、温度传感器

推挽输出

强高低电平(0V/3.3V)

强(20mA)

LED、PWM、SPI

开漏输出

低电平强,高电平靠上拉

弱(需外接)

I2C、电平转换

复用推挽

同推挽,用于外设

USART_TX、TIM_PWM

复用开漏

同开漏,用于外设

I2C_SCL/SDA

5.总结与图像结合

5.1浮空输入: 2号位上下拉电阻都断开即为浮空输入, 这时候引脚的电平状态是不确定的. 采集输入模拟信号时候会用到, 其他场景下我们应该避免使用浮空输入, 导致出现这种引脚电平不确定的状态. 除非有外部电路实现了上下拉, 为引脚提供了可确定的电平状态.

2.2上拉输入: 2号位上拉电阻连接, 此时输入方式称为上拉输入. 经常应用到需要检测GPIO引脚产生上升/下降沿时候用到.

2.3下拉输入: 2号位下拉电阻连接, 此时输入方式称为下拉输入. 经常应用到需要检测GPIO引脚产生上升/下降沿时候用到.

2.4模拟输入: 上下拉电阻断开,施密特触发器关闭,双 MOS 管也关闭。其他外设可以通过模拟通道输入输出。该模式下需要用到芯片内部的模拟电路单元单元,用于 ADC、DAC、MCO这类操作模拟信号的外设.

2.5开漏输出: P-MOS管处于截止状态, 此时输出状态仅由N-MOS控制. 当ODR输出0时经过反相器变成1, 此时N-MOS导通引脚通过N-MOS接地输出低电平. 当ODR输出1经过反相器变成0, 此时N-MOS处于高阻态, GPIO引脚状态不确定.实际应用的时候开漏输出需要外部上拉电子来输出高电平, 否则开漏模式只能输出低电平.

2.6推挽输出: 当ODR输出0时经过反相器变成1, 此时P-MOS截止, N-MOS导通, GPIO输出低电平. 当ODR输出1经过反相器变成0, 此时N-MOS截止, P-MOS导通GPIO输出高电平.

2.7开漏式复用输出: 跟开漏输出功能一样, 只不过芯片内部不是连接到ODR寄存器, 而是连接到其他外设.

2.8推挽式复用输出: 跟推挽输出功能一样, 只不过芯片内部不是连接到ODR寄存器, 而是连接到其他外设.

5. 关键注意事项

1. 电平兼容性:  

   - 开漏模式需外接上拉电阻(如I2C通常用4.7kΩ)。 

   - 3.3V GPIO直接驱动5V设备需谨慎(部分STM32引脚支持5V容忍)。 

2. 抗干扰设计: 

   - 高速信号(如SPI)建议配置为推挽输出,缩短上升时间。 

   - 长线传输时串联22Ω电阻抑制振铃。 

3. 低功耗优化: 

   - 未使用的GPIO设置为模拟模式以降低功耗。 

   - 避免浮空输入模式(可能增加漏电流)。 

6. 实战建议

- **初学者**:从LED(推挽输出)和按键(上拉输入)入手,逐步尝试USART、I2C等外设。 

- **调试技巧**: 

  - 用逻辑分析仪观察GPIO波形(如I2C信号是否正常)。 

  - 检查时钟是否使能(`__HAL_RCC_GPIOx_CLK_ENABLE()`)。 

- **CubeMX配置**:   

 //(USART1_TX复用推挽)

  GPIO_InitStruct.Pin = GPIO_PIN_9;

  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;  // 复用推挽

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

  GPIO_InitStruct.Alternate = GPIO_AF7_USART1; // 复用功能编号

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  ```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想搞嵌入式的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值