简单介绍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

  • 22
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值