STM32--开漏输出和推挽输出
STM32推挽输出和开漏输出
基本概念
1、推挽输出(Push-Pull Output)
由互补的N-MOS和P-MOS管构成推挽结构:
高电平输出:P-MOS导通,输出直接连接VDD
低电平输出:N-MOS导通,输出直接接地
典型应用:LED控制、继电器驱动等需要强驱动能力的场景
2、开漏输出(Open-Drain Output)
仅包含N-MOS管结构:
低电平输出:N-MOS导通
高电平状态:MOS管断开,需外接上拉电阻
典型应用:I2C总线、电平转换等需要”线与”功能的场景
核心差异对比
特性 | 推挽输出 | 开漏输出 |
---|---|---|
输出结构 | 双MOS推挽结构 | 单MOS+外部上拉 |
驱动能力 | 强(直接驱动高低电平) | 弱(高电平依赖外接电阻) |
电平类型 | 固定电源电压 | 高电平由外部上拉电压决定 |
总线冲突防护 | 无 | 支持多设备”线与” |
功耗 | 静态电流较大 | 静态功耗较低 |
电平转换能力 | 不支持 | 支持跨电压域通信 |
配置方法
在gpio初始化的时候配置
- 推挽输出配置流程
1
2
3
4
5
6
7
8
9
10
11
12/* 时钟使能 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/* 结构体初始化 */
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; // 指定引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 输出速率
/* 应用配置 */
GPIO_Init(GPIOA, &GPIO_InitStructure); - 开漏输出配置实现
1
2
3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; // 开漏输出模式
GPIO_Init(GPIOB, &GPIO_InitStructure);
应用场景
必须使用推挽输出的情况
- LED直接驱动(无需外接三极管)
- 电机PWM控制
- 需要快速电平切换的通信协议(如SPI)
必须使用开漏输出的情况
- I2C总线通信(SDA/SCL)
- 5V与3.3V电平转换
- 多主设备总线仲裁
- 需要防止电源反灌的场合