为什么给端口置高电平需要加上拉电阻?
以STM32的普通IO端口为例,根据芯片端口结构图,对端口设置不同的状态,逐一分析每个状态下置端口高电平和加上拉电阻的影响。
端口配置输入模式(端口从①部分到②部分)
1. 浮空模式(端口的默认模式)
- 输入驱动器的上拉电阻和下拉电阻都不接,电路就剩②部分。(此时电路②部分相当于一根两端没有接任何负载的空线,接上电源3.3V,这根线的电压就是3.3V,不构成回路,也没有电流产生。)
- 要将端口输入控制为高电平,直接接外部电源3.3V,可以不接外部上拉电阻。
2. 上拉模式
- 电路①部分的上拉开关接上,输入端口已经被置高电平。
- 此状态下端口已经被置高电平,如果还接上3.3V,不接外部上拉电阻。那么内部上拉电阻的两端电压相同,端口电压任然是高电平,相当于没有接。如果不仅接上3.3V,还接了外部上拉电阻,端口电压任然是高电平。
- 在上拉模式状态下,外部接3.3V,或接3.3v再接上拉电阻没有影响。
3. 下拉模式
- 一般情况下,想要端口电平为高电平,就不会配置成下拉模式。这里假设程序写错了,配置成了下拉模式,硬件任然接着3.3V电源。
- 电路①部分的下拉开关接上,输入端口被置低电平。
- 外接3.3V电源,输入端口会被置高电平,很明显,没有内部的下拉电阻就会短路。如果再加上外接的上拉电阻。两个电阻串联,这里的端口电平需要看外接的上拉电阻和内部下拉电阻的阻值来决定。
- 外部接3.3V,设置输入的下拉模式,这种设置是错误的,但是有无3.3V的上拉电阻尚不影响电路。
端口配置输出模式(端口从③部分到②部分)
1. 推挽模式
-
电路③部分,两个MOS管分别受两互补信号的控制,总是在一个导通时一个截止。
-
输出信号设置为低逻辑电平时,PMOS晶体管被激活,电流从VDD流到输出引脚,端口输出低电平,NMOS晶体管无效。因为输出的电阻小,推挽输出的驱动能力强。
-
如果直接外接3.3V,端口电压为高电平,如果外接3.3V,且外接上拉电阻,端口电压为高电平。
-
输出信号设置为高逻辑电平,NMOS晶体管被激活(闭合)并且电流开始从输出引脚流到GND。端口输出高电平,同时,PMOS晶体管无效。
-
如果直接外接3.3V,会造成短路。如果直接外接3.3V,且接上拉电阻,端口电压为高电平。
2. 开漏模式
- 开漏输出相当于推挽输出的下半部分。
- 与推挽输出的区别是,推挽输出只有低电平和高电平两种状态。
- 开漏输出:当MOS管栅极G高电平时,MOS管导通,将输出引脚与GND连接,外接上拉电阻,能够输出高电平。当MOS管栅极G为低电平时,MOS管截止,输出引脚高阻态,处于“悬空”状态。
- 如果在晶体管导通的情况下,外接3.3V不接上拉电阻,就会造成短路。