介绍GPIO口的输入、输出及配置:一个概述
GPIO共有八种工作模式:四输入+二输出+二复用输出
下面我将简单介绍一下GPIO的八种模式和配置方发
一、GPIO的工作模式
-
4种输入模式
浮空输入(GPIO_Mode_IN_FLOATING):什么电阻都不接,由施密特触发器输入,输入阻抗大,为一个不确定的值。
上拉输入(GPIO_Mode_IPU ):输入数字信号1
下拉输入(GPIO_Mode_IPD):输入数字信号0
模拟输入(GPIO_Mode_AIN):用于ADC外设的输入
-
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