解決方案:
在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