通信双方
ARM 开发板为正点原子的阿尔法开发板,Arduino UNO开发板的单片机型号为:ATmega328P
这个单片机只有一个串口。
CH340 是电平转换芯片,RS232和RS485虽然是一种通信协议,但使用上也可以理解成是一种电平转换。
问题由来
为什么会总结一下这个开发板串口使用的问题。
我想通过 ARM开发板(没有电脑那种USB接口的串口,只有RS232接口和RS485接口形式的串口)的RXD和TXD通过RS232接口或者RS485接口与 Arduino 开发板相连接,但是 Arduino 开发板上是通过串口转(利用CH340G芯片)USB口。
ARM开发板端
RS485和RS232只能同时选择一个,用跳帽来决定。
Arduino开发板端
于是,我就想到下面这几种连接情况。
连接方案
但是,最终的本质是 ARM 端的 RXD 与 Arduino 端的TXD相连接,ARM 端的TXD与 Arduino 端的 RXD 相连接,这样才能完成通信。
第一种
ARM 端 – 使用 RS232(公) 转 USB(公) 线连接,Arduino 端 – 使用 USB (公)(开发板上有CH340芯片),双方之间通过 USB 母对母转换器连接。
思考结果:
第二种
双方都要有485芯片来完成收发,
ARM 端 – 使用 RS485, RS485出来的两条线(A线和B线),Arduino 端 – RXD和TXD引脚(要外接一个485模块),双方之间通过杜邦线连接,A线接A线,B线接B线。(貌似都不需要共地)
思考结果:
这种应该是最可靠的吧。
第三种
ARM 端 – 使用 RXD和TXD引脚,Arduino 端 – RXD和TXD引脚,双方之间通过杜邦线交叉连接。(共地是必须的)
思考结果:
猜想:长距离肯定不行,短距离应该可以吧,实际上行不行不知道,没实验过。
第四种
ARM 端 – 使用 RXD和TXD连接杜邦线转USB公头(下图),
Arduino 端 – 使用 USB公头(开发板上有CH340芯片),双方之间通过通过 USB 母对母转换器连接。
思考结果:
猜想:不行,因为此时ARM 端的USB公头其实就是RXD和TXD,而Arduino 端的USB公头则是D+和D-,之间没有电平转换(应该要有CH340类的电平转换芯片才能连接在一起后才行吧)。
第五种
ARM 端 – 使用 RXD和TXD连接杜邦线转USB公头(单片机程序下载器,有CH340),Arduino 端 – 使用 USB公头(开发板上有CH340芯片),双方之间通过通过 USB 母对母转换器连接。
思考结果:
猜想:这种也可以试一试,试一试才知道实际行不行。
遇到问题
因为上面的方案二中需要用到 Arduino 端 – 直接使用 RXD 和 TXD 引脚,所以我就想用 单片机下载器(有CH340)连接 Arduino 开发板上的 RXD 和 TXD 引脚之后通过USB头连接到电脑上,实验一下,结果就是没有达到期望的目的,现象如下:可以通过单片机向电脑发送数据,但不能通过电脑向单片机发送数据。于是,我就拔掉 USB 口,用 Arduino开发板上的 USB 公头插到电脑上来实验,结果是可以正常发送和接收的。
我就在想为什么会造成这种现象,造成这种现象的原因是什么呢?
猜想一:
会不会是当电脑向开发板发送信号后,由于板子上还连接了一个CH340部分的电路造成负载过大,信号能量太低,所以接收不到呢?
于是,我就专门接了一个5V电源来供电,结果仍然是不行的。
猜想二:
既然不是电源的问题,那就再看把CH340部分的电路给去掉试试看呢?那怎么去掉呢,我就把R9和R8这两个电阻给拆了下来。然后,再次实验,果然就好了。
那为什么会造成这种现象呢?与此同时,又有一个想法冒了出来,如果我把两个USB头(5V、GND、TXD、RXD都接)都接到电脑上会怎么样呢?
现象:两个都可以通过单片机向电脑发送数据,但都不能通过电脑向单片机发送数据。
那我把单片机下载器的那个电源(GND和VCC)给去掉呢?
现象:开发板上的那个 USB 可以完全实现收发,而单片机下载器的那个则只能通过单片机向电脑发送数据,但不能通过电脑向单片机发送数据。
结论:这种情况下,电路中同时只能有一个CH340存在,才能保证收发,具体什么原因可能要看CH340这个芯片手册吧,思考一下午了,不想深究了。要想使用开发板上的RXD和TXD引脚,就把R8和R9这两个芯片给去掉。