CH340串口通信输出电流比较大,如果连接到单片机之间串的电阻太小,电流灌进单片机会导致单片机无法正常复位

解决方案:

 

在CH340芯片的发送引脚TXD上接一个反向二极管,然后再连接到对端 IC。在接收引脚上加一个限流电阻来防止对端IC对CH340 倒灌电。

实现原理:

加反向二极管的原理是:在CH340发送数据时,发送高电平时二极管截止,但是由于对端 RXD 默认上拉也是高电平不会有采样问题,而发送低电平时该二极管导通,对端 RXD 接收到低电平,因此可以正常通讯,并防止了 CH340的TXD发送引脚将电流倒灌到对端 IC。

加限流电阻的原理是:倒灌电流导致芯片工作甚至闩锁效应,是由于引脚电流过大超过了芯片设计时容忍的上限导致芯片内部电路出现异常。因此加一个限流电阻就可以了。
其他通讯场景也可以仿照此方法进行尝试。

除此之外,也有的串口类芯片,自身就带防止倒灌电的功能,如CH340K芯片:
————————————————
版权声明:本文为CSDN博主「骑猪看夕阳~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_46513394/java/article/details/104767655

 

 

 

这两天写一个STM32的程序,其中USART1是要接一个串口屏做显示的,调试前期是还没用到显屏,就拿USART1做log打印。然后就发现了一个很怪异的现象。
USART1串口转usb接到电脑,程序运行稳定,没有异常。
USART1串口转usb不接到电脑,程序异常,容易跑飞HardFault_Handler。后来把USART1的RX IO初始化改了下,就好了。

原本是

GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


后面是

GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

原因分析,是因为RX不上拉,悬空的话,电路的某些信号影响(比如射频,大功率器件),就容易误触发,进入接收中断。改成上拉就可以解决。
而当USART1 串口转usb接到电脑的时候,RX也不再是悬空状态,也不容易误触发接收中断,所以才造成上述说的情况。
————————————————
版权声明:本文为CSDN博主「剑匣破」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kangweijian/java/article/details/78720302

posted @ 2020-05-26 10:32  流水江湖  阅读(2397)  评论(0编辑  收藏  举报