引言:
STM32的GPIO口一般都有输入输出模式,输入模式有:模拟输入,浮空输入,上拉输入,下拉输入;输出模式有:推挽模式,开漏模式。在下文我会细讲这几种模式。GPIO口电路图如下图。
输入模式:
输入模式电路图如图:
模拟输入:
模拟输入比较简单,IO引脚接收外部设备传输进的信号时,不需要上拉或下拉,也不经过TTL施密特触发器(只有这个输入模式不经过施密特触发器),直接将电压输入到芯片内,然后对电压值进行测量,从而得到我们平时说的模拟信号。(施密特触发器是一种电压阈值开关,当电压<1/3系统电压时,输出低电平,反之,输出高电平。)
浮空输入:
浮空输入不启用上下拉电阻。外部设备输入高电平,IO引脚就处于高电平反之低电平。看起来比较简单好用,不过我推荐尽量不要使用浮空输入。它在外部设备断开的情况下电压不稳定,假设外部设备不小心断开了,IO引脚处于悬空的状态下,IO引脚的电平信号是不确定的。如果引脚上面有静电,引脚会处于高电平,无静电则处于低电平。电平状态不稳定会影响到代码判断,你很难会像到是模块断开了的原因。
上拉输入:
上拉输入启用了上拉电阻,外部设备输入高电平,IO引脚就处于高电平反之低电平。假设模块断开,有静电和无静电都会处于高电平状态。
下拉输入:
下拉输入启用了下拉电阻,外部设备输入高电平,IO引脚就处于高电平反之低电平。假设模块断开,有静电和无静电都会处于低电平状态。
输出模式:
输出模式电路图如图:
推挽输出:
P-MOS,N-MOS都启用(P-MOS只允许高电平通过,N-MOS只允许低电平通过)代码设置输出电平信号,电平信号到输出控制的位置,经过P-MOS或N-MOS,输出外部设备。这种通过MOS加强了输出能力。
开漏输出:
P-MOS停止功能,N-MOS都启用,代码设置输出电平信号,电平信号到输出控制的位置,经N-MOS,输出外部设备。由于没有P-MOS,所以无法输出高电平,如果需要使用开漏模式输出高电平,需要在外部接一个上拉电路,并设置为引脚为高电平。