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采集电压信号。因此,可以将这种方式理解为模拟输入的信号是未经处理的信号,是“原汁原味”的信号。

 

  •  序号1,这里是I/O引脚,在这里接了两个保护二极管,这里是对输入电压进行限幅的,Vdd接3.3V,Vss接0V。
  • 序号2,这里连接了一个上拉电阻和下拉电阻,上拉电阻至Vdd,下拉电阻至Vss,该电路可以通过程序进行配置,当上面导通,下面断开,即为上拉输入模式。与之相反的就是下拉输入模式。如果两个电阻都断开,那么就是浮空输入模式,电压值不确定。在这里的作用就是为了给输入提供一个默认的输入电平。讲过施密特触发器整形的波形可以直接写入输入数据寄存器,在用程序读取输入数据寄存器对于某一位的数据,即可知端口的输入电平了
  • 图中为TTL肖特基触发器,实际为施密特触发器(施密特触发器的作用是对输入电压进行整形的)如果输入电压大于某一阈值,输出则会瞬间升为高电平,如果输入电压小于某一阈值,输出则会瞬间降为低电平。
  • 序号3为模拟输入,这个是连接到ADC上的,因为ADC需要接收模拟量。
  • 序号4为复用功能输入,这个是连接到其他需要读取端口的外设上的,如串口的输入引脚等,这根线接收的是数字量,故在施密特触发器后面。
  • 3、复用输出

    (1)复用开漏输出、复用推挽输出:可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用I/O口使用)。

     

     

     

     

     

     

     

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 GPIO口输出和输入方式详解

    发表评论