STM32 GPIO口输出和输入方式详解
在STM32中,我们会要使用程序来对I/O口进行控制,当我们使用I/O口时,我们就需要知道在程序中我们需要这个I/O口来实现什么功能,是输入还是输出。
1、使用输出模式
I/O口常用的输出方式有推挽输出和开漏输出。
(1)推挽输出(GPIO_Mode_Out_PP):可以输出高、低电平,连接数字器件。
(2)开漏输出(GPIO_Mode_Out_OD):输出端相当于三极管的集电极,要得到高电平状态,需要外接上拉电阻。它适合于做电流型的驱动,其吸收电流的能力相对较强,一般可达到20mA。
在开漏输出模式下,P-MOS是无效的,只有N-MOS在工作,数据寄存器为1时,下管断开,这时输出相当于断开,也就是高阻模式。数据寄存器为0时,下管导通,输出直接接到Vss,也就是输出低电平。这种模式下,只有低电平具有驱动能力,高电平是没有驱动能力的。
2、使用输入模式
(1)输入浮空(GPIO_Mode_IN_FLOATING):信号进入芯片内部后,即没有经过上拉电阻也没有经过下拉电阻,只经由施密特触发器输入。如果被配置成该模式,其端口的电平不确定。由于其输入阻抗比较大,所以一般把这种模式用于标准的通信协议。
(2)输入上拉(GPIO_Mode_IPU):上拉输入,就是信号进入芯片后被内部的一个上拉电阻上拉,再经过施密特触发器转换成0、1信号,因此,复位后该引脚电平为高电平。
(3)输入下拉(GPIO_Mode_IPD):下拉输入,就是信号进入芯片后被内部的一个下拉电阻下拉,再经过施密特触发器转换成0、1信号,因此,复位后该引脚电平为低电平。
(4)模拟输入(GPIO_Mode_AIN):信号进入芯片后不经过上拉电阻或者下拉电阻,也不经过施密特触发器,经由另一线路把电压信号传送到偏上相应的外设模块。例如,通常是ADC模块,然后由ADC采集电压信号。因此,可以将这种方式理解为模拟输入的信号是未经处理的信号,是“原汁原味”的信号。
3、复用输出
(1)复用开漏输出、复用推挽输出:可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用I/O口使用)。