【STM32】浅析8种IO口模式

    Stm32上的IO口有8种模式可以选择,分别为:

    四种输入模式:

        (1)浮空输入

        (2)输入上拉

        (3)输入下拉

        (4)模拟输入

    四种输出模式:

        (5)开漏输出

        (6)推挽输出

        (7)复用开漏输出

        (8)复用推挽输出

 

下面是一张很经典的图,Stm32内部IO口的电路结构

    

        保护二极管的作用:当IO引脚的电平大于VDD时,上面的保护二极管导通;当IO引脚的电平小于VSS时,下面的保护二极管导通。通过这两个保护二极管,可以有效防止IO引脚的电平的异常导致烧坏内部的电路。简单说就是IO引脚通过的电平需要是 VSS < IO引脚电平 < VSS。

       TTL肖特基触发器:可以理解为是一个门,输出高低电平,把模拟信号转换成数字信号。

 

第一种-----输入浮空模式:

       这里先假设一个情景,一个IO口没有接上外部电路,就是悬空状态下,那么当读这个IO的电平的时候,那么这IO的电平是多少呢?在没有接上拉电阻下拉电阻(两个开关都是关闭)的时候,我们是并不知道这IO的电平的。这就可以理解为浮空输入。浮空输入状态下,Stm32读到的电平只根据IO端口的电平有关。

 

第二种-----输入上拉模式

    设置输入上拉模式,连接VDD的开关打开,电流的走势如红线所示。此时

            若IO端口悬空时,MCU读到的电平是高电平。

            若IO端口输入是低电平,MCU读到的是低电平。

            若IO端口输入的是高电平,MCU读到的是高电平。

        举个例子,当设置按键的IO口默认松开是高电平,按下按键为低电平。这时候就是设置输入上拉的方式。当没有按下按键的时候,IO端口没有输入电平,由于接上上拉电阻的关系,会有电流从VDD流向MCU,所以什么都不干的情况下,按键松开则为高电平。而当按下按键,IO端口会连接外部的接地引脚,上拉电阻的下方结点电压为0,即MCU读到的电平为低电平。

 

第三种-----输入下拉模式

   同样的道理,设置输入下拉模式,连接VSS的开关打开,电流的走势如红线所示。此时

            若IO端口悬空时,MCU读到的电平是低电平。

            若IO端口输入是低电平,MCU读到的是低电平。

            若IO端口输入的是高电平,MCU读到的是高电平。

 

第四种-----模拟输入模式

    设置为模拟输入模式,从IO口进来的电平不经过TTL施密特触发器,不需要将模拟信号转化为数字信号,一般用于ADC采集。

 

第五种-----开漏输出模式

        如上图红线从①到④过程。当设置开漏模式时,P-MOS管都不工作

        当输出数据寄存器为0时,N-MOS管导通,输出低电平。

        当输出数据寄存器为1时,N-MOS管不工作,输出脚即不输出高电平,也不输出低电平,为高阻态。若要在开漏模式下输出高电平,需要在高阻态的情况下外部接上一个上拉电阻。

        简单说:如果MCU控制要输出0,OK没问题,可以从IO口输出0,但如果MCU想控制要输出1,那么如果电路上没有额外加上上拉电阻,不好意思,IO口不能输出高电平。

        开漏模式的驱动能力(输出电流的能力)比推挽输出弱,在一些对输出电流要求不太高,且低功耗的项目中会使用到。因为输出的电流相对较弱,可以更加省电嘛。

 

第六种------推挽输出模式

    如上图红线从①到④过程。当设置推挽输出模式时,

    当输出数据寄存器为0时,P-MOS管关闭,N-MOS管导通,输出低电平。

    当输出数据寄存器为1时,P-MOS管导通,N-MOS管关闭,输出高电平。

    简单说,MCU想输出0,IO就输出低电平;MCU想输出1,IO就输出高电平。

 

第七种-----复用开漏输出模式

跟开漏输出差不多,区别就在于一个是从MCU控制,一个是从外设模块上控制(TX1,MOSI,MISO.SCK.SS)。

 

第八种-----复用推挽输出模式

        跟推挽输出差不多,区别就在于一个是从MCU控制,一个是从外设模块上控制(I2C 的 SCL,SDA)。

 

最后补充:

       在 STM32 的应用中,除了必须用开漏模式的场合,我们都习惯使用推挽输出模式。开漏输出一般应用在 I2C、SMBUS 通讯等需要“线与”功能的总线电路中。除此之外,还用在电平不匹配的场合,如需要输出 5 伏的高电平,就可以在外部接一个上拉电阻,上拉电源为 5 伏,并且把 GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出 5伏的电平。
————————————————
原文链接:https://blog.csdn.net/qq_38405680/article/details/81540067

————————————————

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值