深度探索串口通信

本文详细记录了一次在嵌入式Linux开发板上遇到的串口通信问题,从数据不匹配开始,探讨了串口通信的格式、电平标准以及数据传输细节。最终发现是TTL电平的开发板与RS-232电平的USB转串口线直接连接导致的问题。解决方案包括使用支持TTL电平的USB转串口线或添加电平转换芯片。
摘要由CSDN通过智能技术生成

串口通信,用的太多了,然而一直没有深入研究过。从刚开始入门单片机,就学习了如何用电脑和单片机通信,但是一旦通信成功后,就再也没有仔细去深入研究过了。这次在使用嵌入式Linux开发板的过程中,被一个问题卡了很久很久,使得我重新认识了串口通信。

问题初现

JZ2440开发板带有1个USB-COM口,三个普通的COM口。电脑通过一条USB线,插到板子的USB-COM口,与板子相连,用来发送控制命令。现在我想使用普通的COM口来和电脑通信,笔记本电脑不带COM口,所以常规的做法就是接一条USB转串口线来实现。

接好之后,开发板串口测试程序也写好了,于是,我打开了电脑上的串口调试助手,开始调试。结果发现,从开发板发过来的数据,跟调试助手显示的不一致。我从开发板发送“ttttt”,电脑收到的十六进制是D1 D1 D1 D1 11。从ascii表上,查到't'应该是74,完全对不上。从此,我陷入到了维持几乎两周的困境。

噩梦开始

1.怀疑COM2口本身坏了,换成旁边的COM3,依旧如此,更换了USB转串口线,还是如此。

2.仔细检查程序是否存在bug,并没有。

3.检查串口参数设置是否一致。波特率、数据位、校验位、停止位、流控,全部都一致。

4.接下来,我开始从发送和接收的数据上来推算,某些规律。

下面是一些测试:
发送一个0x01
电脑串口助手发送 0000 0001
开发板收到的 是   0111 1111
感觉上是位的位置对调,然后全部取反了。电脑和开发板的取位顺序不一致?

发送两个0x01
电脑串口助手发送 0000 0001 0000 0001
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值