|
发表于 2023-3-30 16:20:48
|
显示全部楼层
本帖最后由 abbey_tom 于 2023-3-30 16:41 编辑
我的理解:
STM32的GPIO作为输出,
只有两种输出方式(另两种复用方式只是选择通片内外设做输出源,但端口输出结构不变,仍为如下两种之一),
一是推挽,就是上下两个管子交互工作,一推一拉,确保高电平和低电平的输出能力;
二是开漏,相当于晶体管的OC方式。
我想您可能感兴趣的是后者这种开漏输出方式,
开漏的情况下,上面的P-MOS管不工作,始终处于截止状态,
只有下面的N-MOS管起作用。
如果CPU 写入的是逻辑“1 ”,则N-MOS管也将处于关闭状态,
此时I/O 端口的实际电平将由外部的上拉电阻决定(可高可低,如上拉高至5V以上应该都没有问题的)。
如果CPU 写入的是逻辑“0 ”,则N-MOS管将处于开启状态,
此时I/O端口的电平被导通的N-MOS管拉到“地”的零电位。
在输出部分工作的同时,输入部分是可读取端口实际状态的。
假如CPU写入的是逻辑“1 ”,因此时I/O 端口的实际电平由外部的上拉电阻决定。
如果实际端口被外部下拉到0,则会读取到0(即可能出现写1读0的情况);
如果被外部上拉至高于2.4V则都会读取到1
可见,开漏输出无法真正输出高电平,
即高电平时没有驱动能力,
需要借助外部上拉电阻完成对外驱动。
开漏输出特性的一个明显的优势就是可以很方便的调节输出的电平,
因为输出电平完全由上拉电阻连接的电源电平决定。
所以在需要进行电平转换的地方,非常适合使用开漏输出。
btw, 开漏输出的另一个好处在于可以实现"线与"功能,
所谓的"线与"指的是多个信号线直接连接在一起,
只有当所有信号全部为高电平时,合在一起的总线才为高电平;
只要有任意一个信号为低电平,则总线就为低电平。
而推挽输出就不行,如果高电平和低电平连在一起,会出现电流倒灌,损坏器件。
|
|