看到有文章写的比较清晰了:
看电路图,为你详解STM32的GPIO工作原理
此处仅记录一下自己的理解(图片都是转自上面的文章,非原创),以作备忘。
输入:
-
浮空输入
上图中1-2-3-4指示IO输入电路,内部上拉电阻、下拉电阻都是断开的。
由于没有内部上下拉,所以I/O的电平状态直接由外部输入决定:外部输入高则I/O高,外部输入低则I/O低,如果引脚悬空,则I/O的电平状态是不确定的。
-
上拉输入
上拉输入,就是在浮空输入的基础上启用了上拉电阻,在引起悬空时,可以明确I/O位高电平状态。
-
下拉输入
也上拉输入类似,下拉输入,就是在浮空输入的基础上启用了下拉电阻,在引起悬空时,可以明确I/O位低电平状态。
-
模拟输入
直接到片上外设模块,如ADC
输出:
-
推挽输出
输出驱动器,启用PMOS和NMOS。
当输出控制电路输出高电平时,PMOS导通,I/O端口输出高电平。
当输出控制电路输出低电平时,NMOS导通,I/O端口输出低电平。
-
开漏输出
和推挽输出相对,没有启用PMOS,所以,两张在输出控制电路输出低时表现一致,但是当输出高时,I/O端口的电压不确定,如有外部上拉、下拉电阻,则由外部上拉、下拉确定此时I/O端口电平。