STM32的引脚怎么才能即输入又输出呢

GPIO是通用输入输出的简称,换句话说,其为MCU可控制的引脚,MCU通过GPIO引脚来与外部设备连接,从而实现与外部通讯、控制以及数据采集的功能。本文以STM32的GPIO为例子来介绍GPIO。

      上图所示,

       第一部分保护二极管及上下拉电阻
       如图所示为保护二极管,用于防止引脚过高或过低的外部电压输入,当引脚的外部电压高于VDD时,上方的二极管导通,当引脚电压低于Vss时,下方的二极管导通,从而便可防止不正常的电压输入GPIO而烧毁内部芯片。但是STM32的引脚不应外接大功率的驱动器件。而第一部分和第七部分之间为上拉电阻和下拉电阻,用于GPIO设置时用于设置上下拉电阻。

      第二部分:推挽输出和开漏输出(P-MOS管和N-MOS管)
      P-MOS管和N-MOS管使得GPIO具有推挽输出和开漏输出两种模式:

      (1)推挽输出

      在推挽输出模式下,P-MOS管和N-MOS管都处于工作,其等效电路如下所示:

      当INT往1处输入高电平时,经过反向后,上方的P-MOS导通,下方的N-MOS关闭,OUT对外输出高电平;而当INT往1处输入低电平时,经过反向后,上方的P-MOS关闭,下方的N-MOS打开,OUT对外输出低电平。当引脚高低电平切换时,两个管轮流导通,P管负责灌电流,N管负责拉电流,使其负载能力和开关速度均比普通的方式有较大的提高。推挽输出的低电平为0V,高电平为3.3V。

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

      (2)开漏输出

       在开漏输出模式下,上方的P-MOS管完全不工作。其等效电路如下:

      当我们通过INT往1输出0(低电平)时,P-MOS关闭,N-MOS管导通,使得输出接地;当我们通过INT往1输出1时,P-MOS管和N-MOS管均关闭,则引脚既不输出高电平,也不输出低电平,为高阻态。因此其需要在正常使用时在外部接上拉电阻。其具有“线与”特性,故当多个开漏模式引脚连接在一起时,只有当所有引脚都输出高阻态。才可由外部的上拉电阻提供高电平。若其中一个引脚为低电平,那么线路便相当于短路接地,使得整个线路为低电平,即0V。

采用“配置成开漏输出,再外接上拉”的方式,在输出的时候,直接输出,这一点是没有问题。但是在如何读入数据的时候,问题来了:在读取之前,要不要先把STM32的引脚输出高电平?

所以我就做了一个实验,以下是实验内容。

因为本实验的结果是应用于AT24C16,所以实验电路就直接在这个电路图的基础上改的。

 

上电之后,用万用表测试引脚SCL与引脚SDA的电压,发现不论STM是输出高还是低,SDA和SCL的电压都是是等于STM32输出的,所以可以确定AT24C16的SCL与SDA在刚上电的时候,都是高电平。

然后将SCL与SDA短接,并运行程序

结果:

可以看到读0正确,读1不正确

所以,可以得到结论:要想实现STM引脚即输入又输出,需要:

引脚配置成开漏输出
外部需要上拉
在输入的时候,要先将STM的引脚置高

 

试验中的错误:
前次实验,我直接把3.3V加到SDA引脚上,再去读取SDA的时候,发现不管有没有把STM的引脚置高,STM读取到的都是1,我所以就很高兴地得到了一个能跟理论不一致的结论:可以直接读取SDA上的数据。

当VCC与GND短接的时候,测得的电压是VCC,这是符合生活经验的,手里攥着220V,脚下踩着GND,结果是会死人的。

 


I/O端口位的基本结构
 
————————————————
版权声明:本文为CSDN博主「飞由于度」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35629563/article/details/87710101

      开漏输出一般应用于IIC、SMBUS通讯等需要“线与”功能的总线电路中。此外,其还适用于在电平不匹配的场合,如要输出5V的高电平,则上图的VDD可设为5V,如此在OUT为高阻态时,其对外部会输出5V的电平。

      第三部分:复用功能输出与输入
      “复用功能输出”中的“复用”指的是STM32的其它片上会对GPIO引脚进行控制,此时GPIO引脚作为该外设的一部分。也就是说,GPIO自身的寄存器只管理GPIO管脚的设置,而数据的传输由其它外设控制,比如说使用USART串口通讯时,作为通讯发送引脚的GPIO管脚便被设为USART串口复用功能,由串口外设控制其数据的输出。因此,GPIO的复用功能可分为复用开漏输出和复用推挽输出。

    与模拟输出类似的,复用功能输入便是将GPIO引脚

    第四部分:输入模式(模拟/浮空/上拉/下拉)
   使用 ”模拟输入“功能时,信号不经过施密特触发器,因为经过施密特触发器后信号只有0、1两种状态,所以如果ADC外设要采集原始的模拟信号,信号源必须在施密特触发器之前输入。此时,将GPIO设为模拟输入模式便可实现对原始的模拟信号的采集。

   与之类似的,DAC的模拟信号的输出也可不经过双MOS管结构,直接输出到对应的引脚。

   上拉/下拉输入:GPIO口使用内置的上下拉电阻。

GPIO输入输出小结:


————————————————
版权声明:本文为CSDN博主「Walker_fire」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qwe15954250805/article/details/78186485

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值