当前位置:   article > 正文

STM32输出5V电平_stm32 5v

stm32 5v

Hello,大家好,今天和大家探讨一下,STM32能输出5V电平吗?以及STM32的开漏输出设置。

电平冲突与兼容

这是个常见的问题,比如为了减少系统的改动,在产品升级过程中,会保留上一版本的器件,而新更换的控制器或数字器件的电平与原版不同,为了兼容两种电平,需要电平之间的转换,这是设计者必须考虑的问题。

(1)最简单的变换5V到3V的电路就是电阻分压了:

在这里插入图片描述
图1:5V到3V的电平变换

(2)3V转5V
可以使用逻辑芯片:
在这里插入图片描述
图2:3V到5V的电平变换

升级带来的电平问题

笔者刚刚做完一个产品升级的项目,为了提高人机交互的性能,并且为以后的升级预留空间,将单片机从原来的51换成了ARM。其中有几处蜂鸣器和LED涉及到了电平的变换,如图3所示:
在这里插入图片描述
图3:ARM的IO口与5V电平的冲突

图3为一个嵌入式控制+无线通信平台,其中使用ARM的PA11口控制晶体管Q2,实现反相器,并控制LED的点亮与关闭。在之前的版本中是用51单片机的IO口控制Q2的,当IO口输出高电平(5V)时,Q2不导通,LED不发光,信号K2为低电平,不存在电平不兼容的问题。

现在换成ARM,问题来了,当PA11输出高电平(3.3V)时,Q2实际上是导通了,和原来的版本不一样了。事实上由于ARM采用的是3.3V的电平,导致无论PA11输出高电平还是低电平,Q2都导通,LED都发光,K2一直处于高电平状态。

在测试阶段,笔者发现LED一直发光,经检查做出了上述的分析,怎么解决呢?

STM32的开漏输出模式

我们知道单片机的IO口有一种开漏输出的结构,比如大家熟悉的51单片机的P0口就是开漏的结构,如图4所示:
在这里插入图片描述
图4:单片机开漏结构IO示意图

对于开漏结构的IO口最重要的就是,需要在单片机外部使用“上拉电阻”。如果上拉电阻接5V,那么就是5V逻辑电平了。重点来了:因此我们可以使用STM32 IO口的开漏模式,使用上拉电阻使其输出5V的逻辑电平。

STM32 IO口支持多种模式,通过配置寄存器可以选择不同的模式。STM32的固件库中定义了如下的结构体类型:

typedef struct
{
  uint16_t GPIO_Pin;            

  GPIOSpeed_TypeDef GPIO_Speed; 

  GPIOMode_TypeDef GPIO_Mode;  
                                    
}GPIO_InitTypeDef;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

其中GPIOMode_TypeDef GPIO_Mode;一行用来设置IO口的模式,我们可以定义这样一个结构体:
GPIO_InitTypeDef GPIO_Structure;
然后将结构体中的GPIO_Mode定义成开漏输出:
GPIO_Structure.GPIO_Mode = GPIO_Mode_Out_OD;

在初始化GPIO口之后就可以配合外置的上拉电阻实现5V的输出了。(为了解决LED一直亮的问题,笔者将图3中原来设计的备用不焊接的电阻R32焊接上了)

后记:尽管通过许多方法可以完成不同电平之间的兼容,但是在条件允许的情况下,还是不建议使用这样的结构,这样的系统增加了复杂度,需要更多的电源管理,也增加了硬件BUG的可能性。

水平有限,请多指教

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/457471
推荐阅读
相关标签