介绍GPIO口的输入、输出及配置:一个概述

GPIO共有八种工作模式:四输入+二输出+二复用输出

下面我将简单介绍一下GPIO的八种模式和配置方发

一、GPIO的工作模式

  1. 4种输入模式

  • 浮空输入(GPIO_Mode_IN_FLOATING):什么电阻都不接,由施密特触发器输入,输入阻抗大,为一个不确定的值。

  • 上拉输入(GPIO_Mode_IPU ):输入数字信号1

  • 下拉输入(GPIO_Mode_IPD):输入数字信号0

  • 模拟输入(GPIO_Mode_AIN):用于ADC外设的输入

    1. 4种输出模式

  • 开漏输出(GPIO_Mode_Out_OD)

  • 推挽输出(GPIO_Mode_Out_PP)

  • 复用开漏输出(GPIO_Mode_AF_OD)

  • 复用推挽输出(GPIO_Mode_AF_PP)

  • 二、GPIO内部工作图

    1、保护二极管:其作用主要是防止引脚外部过高或过低电压的输入,当引脚的电压高于VDD时,上方的保护二极管导通,但引脚的电压小于VSS时下面的二极管导通从而防止I/O引脚的电压过高或过低而损坏芯片。

    2、上拉、下拉电阻:控制引脚默认状态的电压,开启上拉的时候引脚默认电压为高电平,开启下拉的时候引脚默认电压为低电平

    3、TTL施密特触发器:主要作用是整流。

    4、P-MOS管和N-MOS管(输出寄存器中):由P-MOS管和N-MOS管,依据两个MOS管的工作方式,使得GPIO具有“推挽输出”和“开漏输出”的模式 P-MOS管高电平导通,低电平关闭,下方的N-MOS低电平导通,高电平关闭。

    三、GPIO的四种输入

    1、浮空输入:此时的VDD和VSS 所在的路径的两个开关都是断开的状态,此时IO口的电平状态是不确定的,由外部输入决定。

     

    2、上拉输入:此时IO口默认是高电平

     

    3、下拉输入:此时IO口默认是低电平

     

    4、模拟输入:此时的信号不经过TTL施密特触发器,直接进入ADC模块,CPU不能直接读取寄存器上的引脚状态。

     

    四、GPIO的四种输出

    1、开漏输出:此时只有N-MOS工作,而P-MOS不工作。当我们控制输出为0时,N-MOS管导通,使其IO口输出低电平。当我们控制输出为1时,此时N-MOS截止。输出指令就不会起到作用而是由I/O端口外部的上拉或者下拉决定,如果没有上拉或者下拉 IO口就处于悬空状态。

     

    2、推挽输出:此时,N-MOS管和P-MOS管都工作,如果控制输出为0,则P-MOS管截止,N-MOS管导通,若控制输出为1,则P-MOS管导通N-MOS管截止。

     

    3、复用开漏输出:

     

    4、复用推挽输出:

     

    五、GPIO的初始化

    1、RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | B | C, ENABLE):使能APB2总线外设时钟;

    2、 RCC_ APB2PeriphResetCmd (RCC_APB2Periph_GPIOA | B | C, DISABLE):释放GPIO复位。

    六、GPIO操作函数

    uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//读GPIO某一位的输入

    uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);//读GPIO的输入

    uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//读GPIO某一位的输出

    uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);//读GPIO的输出

    void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//将GPIO的某个位置位

    void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//将GPIO的某个位复位

    void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//写GPIO的某个位

    void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);//写GPIO

    物联沃分享整理
    物联沃-IOTWORD物联网 » 介绍GPIO口的输入、输出及配置:一个概述

    发表评论