【开发笔记】GPIO 上下拉类型
pull_type有几种类型(PullNone、PullUp、PullDown、OpenDrain)的区别和应用场景。
·
pull_type 有几种类型(PullNone、PullUp、PullDown、OpenDrain)的区别和应用场景。
GPIO 上下拉类型详解
1. PullNone(无上拉/下拉 - 高阻态)
| 特性 | 说明 |
|---|---|
| 电气状态 | 引脚处于高阻态(Hi-Z),内部无驱动 |
| 电平决定 | 完全由外部电路决定 |
| 功耗 | 无额外功耗 |
应用场景:
- 外部已有明确驱动信号(如过零检测、钥匙卡检测)
- 外部已有上下拉电阻,不需要内部重复配置
- 需要高阻抗输入的模拟信号采集
代码示例:
// 过零检测 - 外部硬件驱动,内部无需上下拉
gpio_irq_pull_ctrl(&zero_cross_btn, PullNone);
// 钥匙卡检测
gpio_irq_pull_ctrl(&gpio_keycard_obj, PullNone);
2. PullUp(内部上拉)
| 特性 | 说明 |
|---|---|
| 电气状态 | 内部电阻连接 VCC,默认高电平 |
| 触发方式 | 通常检测下降沿/低电平(按键按下) |
| 空闲状态 | 高电平 |
应用场景:
- 按键输入(按键按下接地)
- 开漏输出设备(如 I2C)
- 防止浮空导致误触发
代码示例:
// 模拟 UART RX - 默认拉高,检测起始位低电平
gpio_irq_pull_ctrl(&simulate_uart_rx_irq, PullUp);
典型电路:
VCC ──[上拉电阻]──┬── GPIO输入
│
按键 ────────────┘
3. PullDown(内部下拉)
| 特性 | 说明 |
|---|---|
| 电气状态 | 内部电阻连接 GND,默认低电平 |
| 触发方式 | 通常检测上升沿/高电平 |
| 空闲状态 | 低电平 |
应用场景:
- 高电平触发的传感器
- 外部上拉电阻场景(如某些干接点输入)
典型电路:
GND ──[下拉电阻]──┬── GPIO输入
│
外部信号 ─────────┘
4. OpenDrain(开漏输出)
| 特性 | 说明 |
|---|---|
| 电气状态 | 只能输出低电平或高阻态,不能输出高电平 |
| 高电平 | 需要外部上拉电阻 |
| 线与能力 | 多个开漏可并联(如 I2C 总线) |
应用场景:
- I2C 总线(SDA/SCL)
- 需要电平转换的场合
- 多个设备共享一条线(线与逻辑)
注意:主要用于输出模式,作为中断输入时慎用。
选型对比表
| 类型 | 默认电平 | 适用场景 | 代码中案例 |
|---|---|---|---|
PullNone |
浮空/外部决定 | 外部有明确驱动 | 过零检测、钥匙卡 |
PullUp |
高电平 | 按键、开漏设备 | 模拟 UART RX |
PullDown |
低电平 | 高电平触发信号 | - |
OpenDrain |
高阻 | I2C、线与总线 | - |
实际选型原则
// 1. 按键检测 → PullUp(按下接地)
gpio_irq_pull_ctrl(&key_btn, PullUp);
gpio_irq_set(&key_btn, IRQ_FALL, 1); // 检测下降沿
// 2. 外部驱动信号 → PullNone
gpio_irq_pull_ctrl(&sensor_irq, PullNone);
// 3. 干接点输入(无源开关)→ 视外部电路
// 如果开关另一端接 VCC → PullDown
// 如果开关另一端接 GND → PullUp
更多推荐



所有评论(0)