太阳集团tcy8722

当前位置: 首页 >应用方案 >技术应用 >

串口通信常见问题及解决方法

干货!串口通信常见问题及解决方法

一、串口通信简介

什么是串口通信?

串口,一般指异步串行接口(Serial port),主要用于串行式逐位数据传输。串口对于处于嵌入式行业的我们来说,是必不可缺的一部分,在刚开始学习单片机时,我们最先学习的通信接口就是USARTUniversal Synchronous/Asynchronous Receiver/Transmitter——通用同/异步串行接收/发送器。其中最常见的串口通信的时序如下图:

什么是串口通信

于是在串口通信就有了起始位、数据位、校验位、停止位、波特率这几个参数。

另外,串口通信主要分为RS232、RS422、RS485三种通信方式,之前有系统地讲解过(RS485/RS232/RS422串口通信接口简介,小忆这里就不再进行详细地介绍了。

二、串口通信常见问题及解决

如上所述,串口作为我们日常开发时的非常重要的一个角色,我们也时常会碰到很多问题,深受各种折磨,接下来我们就来说说平时串口通信中常见的问题以及解决方法。

串口通信常见问题

通常我们调试串口通信碰到问题时,需要用到一个USBTTL、杜邦线(导线)等工具,首先我们应当保证自己的工具是正常的,可以通过以下方法自测排查串口通信问题:

1、将USBTTL中的TX、RX使用杜邦线或是跳线帽短接,打开串口调试工具,例如XCOM、SSCOM等,将波特率、停止位、校验位等参数调至即将需要通信的模块的参数,再去随意发送一些数据,通常笔者是更倾向于使用16进制发送和接收,以此来保证数据中间或者结尾出现一些不可使用ASCII值直观看到的数据,例如数据的结尾多了0x00,0x0a等。若确保自己的工具以及导线没有问题后,即可继续排查通信问题

2、发现使用USBTTL与无线模块之间明明已经反接了TX、RX,发指令给模块之后却没有任何反应。

解决方法:当碰到如上问题时,应当首先自检工具,再检查是否双方共地,GND提供了一个基准0电平,如果没有共地的话,那极有可能会出问题,其次是检查双方的串口参数是否一致,串口通信是一个易于开发并且速度可调的一个的通信协议,其中我们大部分都会使用UART——通用异步传输接收/发送器,串口异步通信也可称为起止式异步通信,是直接以字符为单位进行传输的,字符之间没有固定的时间要求,每个字符中的每一位以固定的时间传送。这就意味着,如果你使用一个较为高的波特率的速度去与一个较为低的波特率的速度去通信的话,那极大可能会导致低波特率设备无法读取到通信时的空闲信号的跳变信息。在这里我用一个比较极端例子进行说明:

当双方串口的参数数据位为8bit,停止位为1bit,校验位为0bit时,但是A设备的波特率为9600,B设备为921600,就会出现以下情况:

当B设备向A设备发送一个字节的数据时,B设备从发送到结束所需用的时间为1/921600*(8+1+1)=10.8us,而相同的A设备发送/接收一个字节的时间为(8+1+1)/9600=1.04ms,试问,像这种相差数倍的时间,当高波特率发送给低波特率设备时,很有可能低波特率设备压根就不会认为发送过来的数据流是一串数据,因为压根没法解析到。

因此串口通信一定要保证双方波特率、停止位等参数一致。反之,低波率向高波特率发送数据就会被认为是错误的数据,也就是所谓的乱码。

3、发现双方已经使用了相同的参数进行通信,但是依旧通信有问题,例如收到乱码等。

解决方法:首先应该降低波特率先确保模块与USBTLL均无问题,也要确保模块没有处于透传等特殊情况下,也可以使用逻辑分析仪等工具进行排查,现在的很多逻辑分析仪是自带数据分析的,可以由此来确保模块正常。其实大部分碰到这种问题的时候,更建议优先查看USBTLL是否支持当前的工作模式。

以上就是太阳集团tcy8722小编总结的串口通信常见问题及解决方法,文中如有出错之处,望指正,希望大家共同进步!

查看技术文章和免费咨询技术问题可以访问成都太阳集团tcy8722电子科技有限公司官网及各官方平台:

微信号:cdebyte

今日头条:太阳集团tcy8722

新浪微博:成都太阳集团tcy8722



太阳集团tcy8722