输入上拉:当IO口作为输入时,比如按键输入,而按键是与地连接,按下时为低电平,则没按下时该IO口应为高电平,上拉即是该IO口通过一个电阻与电源相连,则没按下时为高电平,按下即为低电平。

输入下拉:同理此时按键与电源相连,按下即为高电平,下拉就是该IO口通过一个电阻与地相连,没按下为低电平,按下为高电平。

    推挽输出:作为普通的IO口输出高低电平

  STM32的输入输出管脚有下面8种可能的配置:(4输入、2输出、2复用输出)

    1、浮空输入_IN_FLOATING

    2、带上拉输入_IPU

    3、带下拉输入_IPD

    4、模拟输入_AIN

    5、开漏输出_OUT_OD

    6、推挽输出_OUT_PP

    7、复用功能的推挽输出_AF_PP

    8、复用功能的开漏输出_AF_OD

上拉:输入高电平,然后接一个上拉电阻(起保护作用),上拉就表示该端口在默认情况下输入为高电平;

浮空:就相当于此端口在默认情况下什么都不接,呈高阻态;

开漏输出:就是不输出电压,低电平时接地,高电平时不接地。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电压电压。这种方式适合在连接的外设电压比单片机电压低的时候;

推挽输出:就是单片机引脚可以直接输出高电平电压,低电平时接地,高电平时输出单片机电源电压。这种方式可以不接上上拉电阻。但如果输出端可以会接地的话,这个时候输出高电平可能引发单片机运行不稳定,甚至可能烧坏引脚;

  在stm32中如何配置片内外设使用的IO端口:

    首先:

      1、配置输入的时钟和初始化后即被激活(开启);

      2、如果使用该外设的输入输出管脚,则需要配置相应的GPIO端口(否则该外设对应的输入输出可以做普通GPIO管脚使用)

      3、再对外设进行详细设置。

      对应到外设的输入输出功能有下面三种情况:

        1、外设对应的管脚为输出:需要根据外围电路的配置选择对应的管脚为复用功能的推挽输出或复用功能的开漏输出;

        2、外设对应的管脚为输入:则根据外围电路的配置可以选择浮空输入、带上拉输入或带下拉输入;

        3、ADC对应的管脚:配置管脚为模拟输入;

  如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接,将管脚配置成输出功能后,如果外设没有被激活,那么它的输出将不确定;

STM32的GPIO输出模式就分为普通推挽输出(GPIO_Mode_Out_PP )、普通开漏输出 (GPIO_Mode_Out_OD)及复用推挽输出(GPIO_Mode_AF_PP )、复用开漏输出(GPIO_Mode_AF_OD )。 
  普通推挽输出模式一般应用在输出电平为 0和3.3伏的场合。
  而普通开漏输出一般应用在电平不匹配的场合,如需要输出 5伏的高电平,就需要在外部接一个上拉电阻,电源为 5伏,把 GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出 5伏的电平。
  对于相应的复用模式,则是根据 GPIO的复用功能来选择的,如 GPIO的引脚用作串口的输出,则使用复用推挽输出模式。
  如果用在IC、SMBUS这些需要线与功能的复用场合,就使用复用开漏模式。
  其它不同的复用场合的复用模式引脚配置将在具体的例子中讲解。 在使用任何一种开漏模式,都需要接上拉电阻;
从它的结构我们就可以理解,
  若 GPIO引脚配置为上拉输入模式,在默认状态下(GPIO引脚无输入),读取得的 GPIO引脚数据为 1,高电平。
          而下拉模式则相反,在默认状态下其引脚数据为 0,低电平。  
  而 STM32的浮空输入模式(GPIO_Mode_IN_FLOATING)在芯片内部既没有接上拉,也没有接下拉电阻,经由触发器输入。配置成这个模式直接用电压表测量其引脚电压为 1点几伏,这是个不确定值。由于其输入阻抗较大,一般把这种模式用于标准的通讯协议如 I2C、USART的接收端。
  模拟输入模式(GPIO_Mode_AIN )则关闭了施密特触发器,不接上、下拉电阻,经由另一线路把电压信号传送到片上外设模块。如传送至给 ADC模块,由ADC采集电压信号。所以使用ADC外设的时候,必须设置为模拟输入模式。 
 
  

上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平。而在信号输入为低电平是输入端的电平应该也为低电平。如果没有上拉电阻,在没有外界输入的情况下输入端是悬空的,它的电平是未知的无法保证的,上拉电阻就是为了保证无信号输入时输入端的电平为高电平,同样还有下拉电阻它是为了保证无信号输入时输入端的电平为低电平。

这是上拉电阻和下拉电阻的作用!所以你在这里设置时!是没有多大的区别的!

八种模式:

(1)GPIO_Mode_AIN 模拟输入   //一般用在ADC上
(2)GPIO_Mode_IN_FLOATING 浮空输入     //高低电平不确定,一般用在数据传输,读取电平高低
(3)GPIO_Mode_IPD 下拉输入   //默认低电平,接下拉电阻
(4)GPIO_Mode_IPU 上拉输入   //默认高电平,接上拉电阻
(5)GPIO_Mode_Out_OD 开漏输出    //若接上拉电阻,为高电平,否则为低电平。吸电流能力强。实现IIC的线与,还可以通过改变上拉电阻改变输出电平。
(6)GPIO_Mode_Out_PP 推挽输出    //可输出高低电平
(7)GPIO_Mode_AF_OD 复用开漏输出    //可开启第二功能的开漏
(8)GPIO_Mode_AF_PP 复用推挽输出    //可开启第二功能的推