STM32笔记——GPIO的输入输出模式(超详细,小白看了受益多多)

GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚。将STM32芯片的GPIO引脚与外部设备连接起来,即可实现与外部通信、控制以及数据采集功能。

STM32芯片的GPIO被分成很多组,每组有16个引脚

最基本的输出功能是有STM32控制引脚输出高低电平,实现开关控制,如把GPIO引脚接上LED灯,就可以控制LED的亮灭;引脚接入继电器或三极管,就可以通过继电器或三极管控制外部大功率电器的通断。

最基本的输入功能是检测外部输入电平,如把GPIO引脚连接到按键,然后通过电平高低区分按键是否按下。

在这里插入图片描述

电路原理
引脚的两个保护二极管可以防止引脚外部过高或过低电压的输入,当引脚的电压高于VCC时,上方的保护二极管导通;当引脚的电压低于VSS时,下方的保护二极管导通,这样就可以防止不正常电压引入芯片导致芯片烧毁。

GPIO引脚线经过两个保护二极管的时候,向上流向“输入模式”,向下流入“输出模式”,先来看看输出模式,线路经过P-MOS和N-MOS管组成的单元电路,这个结构就使得GPIO具有推挽输出和开漏输出。

所谓推挽输出模式,就是根据这两个MOS管的工作方式来命名的。在该结构中输入高电平时,经过反向后,上方的P-MOS管导通,下方的N-MOS管关闭,对外输出高电平;在该结构中输入低电平时,,经过反向后,上方的P-MOS管关闭,下方的N-MOS管导通,对外输出高电平。当引脚高低电平切换的时候,两个MOS管轮流导通,P管负责管电流,M管负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。

开漏输出模式,上方的P-MOS管完全不工作。如果我们控制输出为0,低电平,P-MOS管则关闭,N-MOS管导通,使输出接地,若控制输出为1(它无法直接输出高电平)时,则P-MOS管和N-MOS管都关闭,所以引脚既不输出高电平,也不输出低电平,为高阻态。正常使用时必须外部上拉电阻。,具有“线与”特性。也就是说,若有很多个开漏模式引脚连接在一起,只有当所有引脚都输出高阻态的时候,才有上拉电阻提供一个高电平,此高电平的电压为外部上拉电阻的所接的电源的电压。若一个引脚为低电平,那线路相当于短路接地,使得整条线路都为低电平,0V。

推挽输出模式一般应用在输出电平为0和3.3V而且需要高速切换开关的状态的场合。除了必须用开漏模式的场合,一般习惯使用推挽输出模式。

开漏输出模式一般应用在I2C、SMBUS通信等需要“线与”功能的电路中。除此之外,还用在电平不匹配的场合。如需要输出5V的高电平,就可以在外部接上一个上拉电阻,上拉电阻的电源为5V,并且把GPIO设置为开漏输出模式,当输出高阻态的时候,由上拉电阻和电源输出5V的电平。

前面提到的双MOS管结构电路的输入信号,是由GPIO“数据输出寄存器GPIOx_ODR”提供的。

模拟输入输出

当GPIO引脚用于ADC采集电压的输入通道时,用作“模拟输入”功能,此时信号是不经过肖特基触发器的,因为经过肖特基触发器后信只有0、1两种状态,所以ADC外设要采集到原始的模拟信号,信号源就必须在肖特基触发器之前。类似地,当GPIO引脚用于DAC作为模拟电压输出通道时,此时作为“模拟输出”功能,DAC的模拟信号输出就不经过双MOS管结构,而是直接输出到引脚。

输入模式(模拟/浮空/上拉/下拉)

在输入模式时,肖特基触发器打开,输出就禁止,可通过输入数据寄存器GPIOx_IDR读取I/O口状态。其中输入模式可设置为上拉、下拉、浮空、模拟4种。上拉和下拉输入很好理解,默认的电平由上拉和下拉电平决定。浮空输入的电平是不确定的,完全由外部来决定,一般接按键的时候用的是这个模式。模拟输入用于ADC采集。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

输出模式(推挽输出/开漏输出)

在输出模式中,推挽输出时双MOS管轮流工作。开漏输出模式时,只有N-MOS管工作。输出速度有2MHz、10MHz、50MHz几种选择。此处的输出速及I\O口支持的高低电平状态最高切换频率,支持的频率越高,功耗越大,如果功耗要求不严格,把速度设置成最大即可。
在这里插入图片描述

复用功能(推挽/开漏)

复用功能模式中,输出使能,输出速度可配置,可工作在推挽及开漏模式,但是输出信号源于其他外设,输出寄存器GPIOx_ODR无效;输入可用,通过输入数据寄存器可获取I/O口的实际状态,但一般直接用外设的寄存来获取该数据信号。
在这里插入图片描述

推挽和开漏的区别
在这里插入图片描述

如有技术上的问题,欢迎在下方评论区指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

%Zero%

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值