GPIO的工作模式


前言

记录了GPIO外设的基本结构以及8种工作模式

GPIO(General Purpose Input Output)通用输入输出口
可配置为8种输入输出模式
引脚电平:0V~3.3V,部分引脚可容忍5V
输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等,比如软件模拟IIC、SPI
输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等


提示:以下是本篇文章正文内容,下面案例可供参考

一、GPIO基本结构

基本结构如图所示,在图片最右边,两个保护二极管连接到了I/O引脚上

保护二极管的作用是:

输入时,IO引脚输入的电压如果大于3.3V,则连接VDD的二极管导通;IO引脚输入的电压如果小于0V,则连接VSS的二极管导通,只有当IO引脚输入的电压在0到3.3V之间的时候,才会进入内部电路,这样防止过大的电压进入单片机内部,造成损坏

在这里插入图片描述

二、GPIO的工作模式

通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式(四种输入,四种输出)

模式名称性质特征
浮空输入数字输入可读取引脚电平,若引脚悬空,则电平不确定
上拉输入数字输入可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
下拉输入数字输入可读取引脚电平,内部连接下拉电阻,悬空时默认低电平
模拟输入模拟输入GPIO无效,引脚直接接入内部ADC
开漏输出数字输出可输出引脚电平,高电平为高阻态,低电平接VSS
推挽输出数字输出可输出引脚电平,高电平接VDD,低电平接VSS
复用开漏输出数字输出由片上外设控制,高电平为高阻态,低电平接VSS
复用推挽输出数字输出由片上外设控制,高电平接VDD,低电平接VSS

在Keil中,用结构体定义了这八种模式

typedef enum
{ GPIO_Mode_AIN = 0x0,           // 模拟输入
  GPIO_Mode_IN_FLOATING = 0x04,  // 浮空输入
  GPIO_Mode_IPD = 0x28,          // 下拉输入
  GPIO_Mode_IPU = 0x48,          // 上拉输入
  GPIO_Mode_Out_OD = 0x14,       // 开漏输出
  GPIO_Mode_Out_PP = 0x10,       // 推挽输出
  GPIO_Mode_AF_OD = 0x1C,        // 复用开漏输出
  GPIO_Mode_AF_PP = 0x18         // 复用推挽输出
}GPIOMode_TypeDef;

typedef:用途是将一个比较长的变量类型名换个名字,便于使用

1.模拟输入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ltyOoJC-1689843221559)(单片机学习笔记.assets/image-20230611172801386.png)]
如图,外部信号经过I/O引脚直接输入到单片机的片上外设,比如ADC外设,用于采集输入的电压

2.浮空输入

在这里插入图片描述
浮空输入模式,是GPIO口最常用的一种模式,它的优点是输入阻抗高,MCU采集的状态是单纯的外部信号;缺点是没有IO信号时,读取的端口状态不确定

施密特触发器可以把输入的模拟信号转换成高低的电平信号,施密特触发器前是模拟量,后是数字量

3.上拉输入

在这里插入图片描述
当I/O输入的信号比较弱,容易受到干扰不稳定时,选泽上拉输入,通过读输入寄存器IDR的值,就可以知道I/O引脚是高电平还是低电平

4.下拉输入

在这里插入图片描述
下拉输入如图,其实开/关的上拉或者下拉电阻可以通过软件配置,上拉、下拉的作用是给输入提供一个默认的输入电平的,高电平或者低电平

5.推挽输出

在这里插入图片描述
推挽输出如图,推挽输出优点在于输出高低电平与电源电压基本没有压差,可以提供较强的高电平与低电平驱动能力,可以直接驱动小于20mA的小功率外设如发光二极管。

推挽输出时的内部控制简化图如下,与复用推挽输出的区别是,推挽输出是单片机自己拥有引脚的控制权,而复用推挽输出的控制权则转移给了片上外设,比如Timer、IIC、SPI等

在这里插入图片描述

6.开漏输出

在这里插入图片描述
开漏输出一般被用作通讯引脚,因为开漏模式下引脚具有线与的特点,比如我们配置IIC的时候,电路一般被配置成开漏输出+外部上拉的模式,我们要注意区分一下推挽和开漏两种模式,下面是一些总结

  1. 推挽模式下,高低电平都有驱动能力;
  2. 推挽模式,P-MOS、N-MOS都在工作,输出数据寄存器为1时,下管断开,也就是N-MOS断开,N-MOS接通,这时输出直接接到VDD,,输出高电平,输出数据寄存器为0时,下管导通,也就是N-MOS接通,这时输出直接接到VSS,也就是输出低电平,所以推挽模式单片机对GPIO有绝对控制权
  3. 开漏输出模式下,高电平没有驱动能力(开漏输出相当于高阻态),低电平有驱动能力,因为开漏输出模式下,P-MOS 是没用的,只有N-MOS在工作,输出数据寄存器为1时,下管断开,也就是N-MOS断开,这时输出相当于断开,也就是高阻模式,输出数据寄存器为0时,下管导通,也就是N-MOS接通,这时输出直接接到VSS,也就是输出低电平,这种模式下,只有低电平有驱动能力,

开漏模式可以作为通讯协议的驱动方式,比如IIC通讯的引脚,就是使用开漏模式;这个模式可以避免多个设备的干扰;此外,这个模式还可以用来输出5V,只要IO口外接上拉电阻到5V,然后输出数据寄存器为1时直接高阻接到VDD,输出就会被直接拉高到5V

7.推挽复用输出

代码如下(示例):
引脚控制权转移到了片上外设,其它与推挽输出没有区别

8.开漏复用输出

在这里插入图片描述
引脚控制权转移到了片上外设,其它与开漏输出没有区别

开漏模式和推挽输出的区别

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值