对于嵌入式硬件这个庞大的知识体系而言,太多离散的知识点很容易疏漏,因此对于这些容易忘记甚至不明白的知识点做成一个梳理,供大家参考以及学习,本文主要针对推挽、开漏、高阻态、上拉电阻这些知识点的学习。
GPIO基础
下图截取的数据手册图,里面包含了GPIO的相关模式的介绍。
![图片[1]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811205759253-image-1024x734.png)
MCU输出时会有两种模式,一种叫做推挽模式,一种是开漏模式,对于一个GPIO要么不就是输出高电平不就是输出低电平吗,为什么还要有这两种模式,答案在后文。
GPIIO内部结构简图
如下图所示,我们要关注的也就是mos管的开关状态,枚举一下会有四种情况,如下所示:
![图片[2]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811205831883-image.png)
![图片[3]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811205905589-image-1024x734.png)
推挽的理解
当 Q1 PMOS 打开,Q2 NMOS 关闭,VCC给负载所在电路的给这颗 NMOS 的栅极供电,也就是推电流出去,输出高电平,当Q1 PMOS 关闭,Q2 NMOS打开时,负载所在的电路的NMOS栅极放电,也就是挽电流回来,这里用的是 NMOS 也就是在此专栏的硬件篇专门讲过为什么是NMOS,应用的场景也有说明,如果还是不懂可以回去看看。
![图片[4]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811205944759-image-1024x476.png)
因此我们需要加一个外部电阻,上拉电阻。
![图片[5]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811210105926-image-1024x455.png)
第一个就是改变高电平的电压,防止主控烧坏相关器件,例如在IIC中,我们想用主控控制一个芯片,但是主控输出的高电平为5V, 芯片引脚只支持3.3V输入 ,因此会造成芯片给烧毁等一系列不确定因素的问题了,因此我们就要使用开漏模式了,同时最主要的就是需要外接一个上拉电阻了,用来将5V拉低成3.3V。
![图片[6]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811210144674-image-1024x576.png)
也就是NMOS关闭就是高阻态,高电平由外部提供,打开就是低电平。
第二个作用就是可以让几个GPIO同时控制芯片,但是推挽就会造成短路。
![图片[7]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811210234616-image-1024x563.png)
这里补充一下,I2C总线理论上可以连接127个设备(7位地址模式),2^7 (本质就是前7位是地址后一位是方向 )减去一个设备0 就是127.
推挽和开漏的区别
![图片[8]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811210258321-image.png)
上拉电阻,到底在拉什么?
上拉电阻应用的场景
上拉电阻都会伴随着mos管的出现,其实就是工作在开漏模式下的GPIO口,
![图片[9]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811210337822-image-1024x449.png)
但是如果例如相关外部芯片集成上拉电阻,我们就不用外部加了,如下图所示:
![图片[10]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811210412733-image-1024x426.png)
上拉电阻如何取值?
绝大部分上拉电阻都是 1K-100K 之间,电阻小的话优点就是驱动能力强,电阻大的话漏电流小。
![图片[11]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811210438153-image-1024x357.png)
![图片[12]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811210503242-c121ce5649ce000571623bbdd226a52a.webp)
漏电流?驱动能力?是什么?
漏电流就是mos管打开时,会形成通路,如果这个电阻是1K的话,那这边的漏电流就有5mA了,这个电流是白白浪费的,而且还会产生热量。因此阻值当然是越大越好,但是驱动能力会弱。。
![图片[13]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811210530483-image-1024x625.png)
何为驱动能力?
也就是低电平向高电平的电平转换的过程,虽然你看到的是一个瞬间的上升沿,但是其实刻度调大之后,低电平到高电平并不是瞬间完成的,也就是之前章节说到的爬升过程了。。也要结合相关芯片负载的硬件选型了,否则会有失真的情况了。
![图片[14]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811210556949-image-1024x512.png)
![图片[15]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811210607719-f1428158be041e1f0d50afe2fc488ef7.webp)
![图片[16]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811210614175-1718a3e1c9296e5b160940eb7d1f6e31.webp)
![图片[17]-70005 嵌入式硬件 GPIO 推挽、开漏、高阻态、上拉电阻-爱设计](https://lovedisign.com/wp-content/uploads/2025/08/20250811210621338-7b0e61176e244267f5fb533bbfbbd64f.webp)
暂无评论内容