STM32的GPIO引脚可以配置成8中模式:
(1)GPIO_Mode_AIN 模拟输入
(2)GPIO_Mode_IN_FLOATING 悬空输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_IPU 上拉输入
(5)GPIO_Mode_Out_OD 开漏输出
(6)GPIO_Mode_Out_PP 推挽输出
(7)GPIO_Mode_AF_OD 复用开漏输出
(8)GPIO_Mode_AF_PP 复用推挽输出
这8中模式可以软件编程,IO端口位的基本机构如下图所示:
IO口的这8中模式在图中IO口结构中都已经体现出来了。下面的就稍微地讲讲。
GPIO_Mode_AIN模拟输入模式在上图的在结构图中没有做任何没有做任何处理,直接输入什么信号就是讲信号直接传入芯片中。
GPIO_Mode_IN_FLOATING线控输入模式跟GPIO_Mode_AIN差不多,信号也是不做任何处理直接传入芯片。
这里需要注意的是,上面这两种模式,名字上虽说是输入,但实际上是可以用作输出的。换句话说是,GPIO_Mode_AIN与GPIO_Mode_IN_FLOATING这两种模式下,即可用做输入也可用输出,最好的例子是官方例程中,DAC产生正弦波的输出引脚配置就是把引脚配置成GPIO_Mode_AIN,而它却是用于波形输出的。
GPIO_Mode_IPD下拉输入模式对应着结构图中输入带下拉电阻的那部分电路,如下图所示:
GPIO_Mode_IPU上拉输入模式对应着结构图中输入带上拉电阻部分的电路,如下图所示:
如果把IO口配置成这种模式的话,图中的开关就会闭合。
GPIO_Mode_Out_OD开漏输出与GPIO_Mode_Out_PP推挽输出都对应的电路图,如下:
当IO口配置成GPIO_Mode_Out_OD开漏输出时,图中P-MOS不工作(只图中P-MOS的栅极输入高电平)就相当于一个阻值很大的电阻,这时候,只剩下N-MOS工作,控制它的栅极为高,则由于P-MOS看成了一个上拉电阻IO口直接输出高电平,当他的栅极为低,N-MOS打开直接输出低。这就是开漏输出。
当IO口配置成GPIO_Mode_Out_PP推挽输出时,P-MOS与N-MOS则配合工作,他们的栅极控制信号互斥,当P-MOS为导通状态时,N-MOS则为截止状态,IO引脚直接输出高电平;当P-MOS为截止状态时,N-MOS为导通状态,则IO口输出低电平。这就是推挽输出的原理了。
GPIO_Mode_AF_OD复用开漏输出与GPIO_Mode_AF_PP复用推挽输出的基本原理与上面的GPIO_Mode_Out_OD与GPIO_Mode_Out_PP差不多,它的输出控制单元的控制信号还要陪配合的AF输出线控制,如图所示:
图中的控制线 Alternate Function Output参与控制输出。
GPIO_Mode_AIN适用场合:
ADC与DAC通道引脚、
GPIO_Mode_IN_FLOATING适用场合:
外部中断引脚、串口RX引脚、SPI的SCK引脚、定时器通道引脚输入捕获
GPIO_Mode_IPD适用场合:
特殊场合,需要下拉电阻的(暂时想不到)。
GPIO_Mode_IPU适用场合:
CAN RX引脚、
GPIO_Mode_Out_OD适用场合:
特殊场合(暂时想不到)
GPIO_Mode_Out_PP适用场合:
IO口通常输出配置、
GPIO_Mode_AF_OD适用场合:
I2C的SCL与SDA引脚、
GPIO_Mode_AF_PP适用场合:
CAN TX引脚、串口TX引脚、SPI的从模式的MISO与主模式的MOSI引脚、定时器通道引脚输出、