STM32 IO接口推挽输出 (PP)和开漏输出 (OD)

目录

概述

[1 推挽输出 (PP)介绍](#1 推挽输出 (PP)介绍)

[1.1 原理](#1.1 原理)

[1.2 推挽输出的核心特点](#1.2 推挽输出的核心特点)

[1.3 与开漏输出 (OD) 的关键区别](#1.3 与开漏输出 (OD) 的关键区别)

[1.4 何时使用推挽输出?](#1.4 何时使用推挽输出?)

[1.5 在STM32CubeMX中配置](#1.5 在STM32CubeMX中配置)

[2 开漏输出 (OD)](#2 开漏输出 (OD))

[2.1 实现原理](#2.1 实现原理)

[2.2 与推挽输出的关键区别总结](#2.2 与推挽输出的关键区别总结)

[2.3 核心应用场景](#2.3 核心应用场景)

[2.4 配置与使用要点](#2.4 配置与使用要点)

[3 STM32 IO框图](#3 STM32 IO框图)


概述

本文主要介绍STM32 IO接口推挽输出 (PP)和开漏输出 (OD)的原理和应用方法。推挽输出是STM32最常用、驱动能力最强的输出模式。它的核心在于内部有两个MOS管 ,可以主动、强有力地 将引脚驱动到高电平(VDD)或低电平(VSS),如同一个"推-拉"组合。开漏输出(Open-Drain, OD)是一种只能主动拉低,无法主动推高 的输出模式。它的输出端如同一个接地的"漏极"开关,只能打开(输出低)或关闭(高阻态) ,高电平需要依赖外部上拉电阻提供。

1 推挽输出 (PP)介绍

1.1 原理

推挽输出是STM32最常用、驱动能力最强的输出模式。它的核心在于内部有两个MOS管 ,可以主动、强有力地将引脚驱动到高电平(VDD)或低电平(VSS),如同一个"推-拉"组合。

当需要一个引脚独立、强力、明确地输出高或低电平时,推挽输出是不二之选。它是STM32数字输出的主力军。而当你需要构建"线与"总线、进行电平转换或模拟双向口时,才需要考虑使用开漏输出。

1.2 推挽输出的核心特点

  • 强大的驱动能力 :由于能主动提供电流(source current)和吸收电流(sink current),推挽输出的高、低电平都非常"硬",带负载能力很强,可以直接驱动LED、继电器等。

  • 快速的高低电平切换 :两个MOS管交替导通,可以提供很低的输出阻抗,因此边沿陡峭,适合高速数字信号(如SPI、FSMC)。

  • 明确的电平 :输出电平始终是清晰的VDD或VSS,不会浮空

1.3 与开漏输出 (OD) 的关键区别

特性 推挽输出 (PP) 开漏输出 (OD)
输出高电平的实现 主动上拉 至 VDD 断开(高阻态),依赖外部上拉电阻
驱动能力 ,可提供电流 ,高电平由上拉电阻提供电流
电平转换 不能直接进行 天然支持(通过连接不同电压的上拉)
总线应用 不适用于多设备"线与" 适用于 I2C等多设备总线
速度 ,边沿陡 相对慢,上升沿由上拉电阻和电容决定

1.4 何时使用推挽输出?

推挽输出是STM32的默认输出模式 ,适用于绝大多数需要确定性强电平输出的场景:

  1. 驱动LED、蜂鸣器、继电器等需要电流的器件。

  2. 高速数字通信 ,如 SPI、USART(TX引脚)、FSMC、SDIO

  3. 产生PWM波控制电机、舵机。

  4. 驱动数字芯片的片选、使能引脚

  5. 任何不需要"线与"功能的通用数字输出

使用注意事项

  1. 不能直接"线与":如果两个推挽输出引脚直接连在一起,一个输出高一个输出低,会形成短路,损坏芯片。

  2. 电平固定 :输出高电平就是MCU的VDD(如3.3V),无法直接输出高于VDD的电压

  3. 功耗:在高低电平切换的瞬间,两个MOS管有极短的同时导通时间,会产生瞬时峰值电流,在极高频率下需考虑功耗和EMI。

1.5 在STM32CubeMX中配置

在GPIO配置页面,将 "GPIO output type" 设置为 "Output Push Pull" 即可。通常无需使能上下拉电阻。

cpp 复制代码
// 设置为高电平(推挽模式下,这是强驱动输出)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);

// 设置为低电平(强驱动拉低)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);

// 也可以直接使用Toggle函数翻转
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);

2 开漏输出 (OD)

开漏输出(Open-Drain, OD)是一种只能主动拉低,无法主动推高 的输出模式。它的输出端如同一个接地的"漏极"开关,只能打开(输出低)或关闭(高阻态) ,高电平需要依赖外部上拉电阻提供。

2.1 实现原理

下图直观展示了开漏输出的三种典型状态,并与推挽输出进行对比,其核心区别在于内部P-MOS管的缺失:

2.2 与推挽输出的关键区别总结

特性 开漏输出 (OD) 推挽输出 (PP)
内部结构 只有N-MOS管(接GND) P-MOS (接VDD)和N-MOS(接GND)
输出高电平 断开/高阻态必须靠外部上拉电阻拉高 芯片内部主动强上拉至VDD
驱动能力 (高电平由上拉电阻提供电流) (高、低电平均由芯片主动驱动)
关键特性 支持 "线与" ,可进行电平转换 不支持"线与",电平固定为VDD/VSS
典型应用 I2C/SMBus等总线、电平转换、模拟双向口 驱动LED、高速通信(SPI, USART)

2.3 核心应用场景

开漏输出的几大独特优势决定了其不可替代的适用场景:

1) 实现"线与"功能(最重要)

  • 原理 :多个开漏引脚直接相连,并通过一个公共上拉电阻接VCC。任何 一个引脚输出低电平,总线即为低;只有所有引脚都输出高阻态,总线才被上拉为高。

  • 应用 :这是 I2C、SMBus、1-Wire 等多主机总线的基础。它实现了无冲突的仲裁机制 (谁先拉低谁赢)和简单的与逻辑

2)进行电平转换

  • 原理:上拉电阻可以接到一个与MCU VDD不同的电压(如5V)。当引脚输出高阻态时,总线电平被上拉到5V;输出低时,则拉低到0V。这样,一个3.3V的MCU就可以安全地与5V器件通信。

  • 应用:连接不同工作电压的逻辑芯片或传感器,是最简单的电平转换方案之一。

3) 模拟准双向口

  • 如前一个问题所述,通过软件在开漏输出(加上拉)和输入模式间切换,可以模拟传统8051的准双向口,实现分时的输入输出

4) 驱动高于VDD的负载

  • 将上拉电阻接到更高的电压(如12V),可以驱动继电器、更高电压的LED等。此时需确保引脚耐压值足够。

2.4 配置与使用要点

硬件配置(以STM32CubeMX为例)

  1. 将引脚模式设为 GPIO_Output

  2. 关键 :将 "GPIO output type" 设置为 Open Drain

  3. 如果芯片内部有上拉电阻且符合要求,可将 "GPIO Pull-up/Pull-down" 设为 Pull-up 。对于I2C等总线,更推荐使用精度更高的外部上拉电阻(如4.7kΩ)。

代码操作示例

cpp 复制代码
// 初始化已在CubeMX完成,模式为开漏上拉

// 1. 输出低电平(主动拉低)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);

// 2. 输出"高电平"(实际是释放为高阻态,靠上拉电阻拉高)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 此时引脚为高阻态

// 3. 在需要时读取引脚状态(在输出高阻态时)
// 注意:严格来说,在开漏模式下,HAL_GPIO_ReadPin读取的是引脚即时电平。
// 若要可靠读取外部输入,更规范的做法是先将引脚模式切换为输入上拉。
GPIO_PinState state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);

注意事项

  • 必须接上拉电阻 :这是开漏模式正常工作的绝对前提,否则无法产生高电平。

  • 速度限制:上升沿速度取决于上拉电阻值和总线电容(RC时间常数),电阻越小速度越快,但功耗越大。高速应用(如400kHz I2C)需要计算并选择合适的上拉电阻。

  • 功耗考虑:在持续输出低电平时,电流会通过上拉电阻到地,产生持续功耗。

3 STM32 IO框图

1) 标准IO接口

2) 支持5V IO接口

3) 配置IO工作模式

4) 输入端口

5) 输出配置

相关推荐
VekiSon3 小时前
51单片机——从入门到实操
单片机·嵌入式硬件·51单片机
Arciab3 小时前
51单片机_中断&定时器
单片机·嵌入式硬件·51单片机
2401_863326113 小时前
基于单片机超高精度电参数测试设计
单片机·嵌入式硬件
搁浅小泽3 小时前
DIP插装加工整线流程
单片机·嵌入式硬件·可靠性工程师
Dillon Dong8 小时前
STM32嵌入式:使用 MT29F8G08ABACAWP NAND 的FLASH全面指南
c语言·stm32
polarislove02148 小时前
10.2[ADC]ADC 模块的结构框图-嵌入式铁头山羊STM32笔记
单片机·嵌入式硬件
EVERSPIN8 小时前
微控制器mcu典型内部结构及MCU微控制器的工作原理
单片机·嵌入式硬件·mcu·微控制器·mcu微控制器
小李做物联网8 小时前
【单片机物联网毕设】基于单片机stm32蓝牙颜色与波长反馈物联网嵌入式项目系统
stm32·单片机·嵌入式硬件·物联网
先知后行。8 小时前
IIC学习
单片机·嵌入式硬件