单片机串行通信程序调试原因

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-29
串口UART作为嵌入式应用和通讯领域中最常用的接口之一,接口协议虽然简单,但在实际应用中不同设备之间的通讯也会存在各种小问题,下面对使用中各种常见的问题做下总结和梳理,可作为调试参考。串口可分为异步串口(UART)和同步串口(USART),后者多出时钟信号线用作通讯时信号同步。本偏仅介绍异步串口。
一、串口通信常见问题
串口通信乱码
串口通讯乱码通常是指接收方接收到的数据不符合预期,出现此情况时需要考虑的因素通常包含以下几个方面:

双方设定的串口参数是否匹配,需检查设置的:串口波特率、串口数据格式等参数。
串口通讯电压不匹配,不同的串口设备接收可正常进行解码的高低电平门限不同,如同样是3.3V串口通讯,A设备低电平门限1.5V,B设备低电平门限1V。当实际串口电压低电平只有1.5V时,B设备无法正常接收数据。又如:A设备为5V串口,B设备为3.3V串口,同样有电压不匹配的问题。
串口通讯实际工作波特率误差较大,即:串口工作实际波特率和理论值偏差较大,因一些MCU和串口设备所用时钟为了兼顾其他资源和应用需要,实际工作的串口速率和设定会有偏差。比如:标称为9600bps时,实际工作在了10000bps(误差超过4%),此时可能已经超出接收方的设计标准。
串口通讯信号质量差,如通讯时信号上升下降抖动严重,信号有过冲或者变化比较迟缓,此时检查硬件上共地是否良好,以及线路上有无串接/并联其他器件导致。
数据格式显示问题,通常使用十六进制或ASCII码格式居多,使用时需要区分。
串口无法发送
串口无法发送通常是指与此串口的TXD连接的对端设备RXD通道接收不到任何数据,总结如下:

使用仪器对TXD通道进行实际测量,观察硬件波形,确定信号是否有输出以及是否正常。(串口电压、串口信号上升下降时间)
短接设备的TXD和RXD通道回环测试,看自收发是否可以成功。排除是自身设备异常还是对端异常。
确定应用软件是否打开串口硬件流控,如当启用RTS/CTS硬件流控后但实际该引脚并没有连接或连接但不生效时,按照协议规定,CTS输入无效则发送方暂停发送数据。
MCU软件编码问题或计算机端软件工作异常。
串口无法接收

当串口接收不到任何数据的原因通常如下:

对端串口实际未能成功发送数据。
串口发送有效电压不满足芯片接收解码要求。
MCU软件编码问题或计算机端软件工作异常。
二、常用的排查小技巧
对于以上的常见串口调试问题,有以下几个方法和技巧可供参考使用。

使用硬件仪器
善于使用示波器等硬件采集或分析工具查找问题,用此方法可以确定线路上信号的串口电压、串口数据格式、串口通信波特率等参数。

串口Loopback检测
当手头没有硬件仪器时,将设备自身的TXD和RXD短接起来进行自收发测试也是一个不错的选择,此方式可以简单确认硬件通路和整个逻辑是否是打通的。但缺点是定位问题不够精准。

更换串口调试软件
计算机端串口软件种类较多,不排除一些设备或驱动软件没法成功适配所有的串口调试软件,此时可尝试多使用几款不同的软件对比测试。

三、串口通信基础
当两个设备使用UART进行通信时,它们至少通过三根导线连接:TXD串口发送、RXD串口接收、GND。串口设备通过改变TXD信号线上的电压来发送数据,接收端通过检测RXD线上的电压来读取数据。

什么是串口通信

计算机一次传输信息(数据)一位或多个比特位。串行是指传输数据一次只传输一位。当进行串口通信时发送或者接收的每个字(即字节或字符)一次发送一位。每一位都是逻辑‘1’或者‘0’。也用Mark表示逻辑1,Space表示逻辑0。

串口数据速率使用 bits-per-second ("bps") 或者 baud rate ("baud")。这表示一秒内可以传输多少逻辑1和0。当波特率超过 1000,你会经常看到用Kbps表示的速率。对于超过 1000000 的速率一般用Mbps 来表示。

4位共阳数码管的有一个位的其中一段不亮,而其他位的该段能正常显示。这有些不符合常理,因为共阳数码管的4个为的段是连在一起的,如果是程序问题或者硬件连接有问题,应该4位全不亮。

第 1 页
重庆 购纯电动汽车选蔚来ES6,首付0元起
最近1小时前有人申请相关服务
蔚来ES6超长续航610km,终身免费换电,终身免费质保,即刻预约试驾
点击立即咨询,了解更多详情
咨询
蔚来汽车 广告
原因:经排查,原因是发现电路板的背面该段和其他位的位选线短路了,这样就导致当动态扫描的时候,要显示这一位的时候,其他三个位选是拉低的,这样就造成了这一段应该为高电平被拉低了,所以出现了这种四个位中只有一位的段显示不正常。

第 2 页
2、数码管显示出现了严重的重影,程序没有问题的(在其他板子上测试没有问题)。
原因:经排查,排除了器件的问题,也排查了连线问题。最后发现了共阳端的驱动三极管的基极的电压和正常的有些不一样,但是差别很小。我发现为了保护单片机的引脚,给单片机多加了一层底座,怀疑底座的原因造成。直接拆掉一层底座,发现数码管显示正常了。

第 3 页
所以应该是底座的电阻加上限流电阻之后阻值过大,导致单片机输出电流过小,无法驱动pnp三极管输出低电平。造成数码管有严重残影。
第 4 页
百度文库
搜索
单片机串行通信程序调试原因
百度文库10亿海量资料,查找管理一应俱全
打开APP

  • 单片机MSPG2553,串口通信,程序如下,为何 是输出乱码?
    答:检查串口线,串口接口等物理连接;检查波特率等通信参数;不行就只能断点调试了,看看串口收来的对不对,收来放入缓存的又对不对。再有就是更换串口助手测试,看看是不是串口助手的原因。
  • 8051单片机 汇编语言 串行口通信问题 (程序很简单的)
    答:发送成功时,才会运行到下一步,这需要一段时间。MOVSCON,#40H 改为:MOVSCON,#50H 增加: 这是初始化定时器1的语句 MOV TMOD,#20H MOV TH1 ,#0FDH MOV TL1 ,#0FDH SETB TR1
  • 单片机与PC通信得先开单片机,否则PC机的串口调试助手收不到数据,这是...
    答:1、很有可能是在发送最后一个字节时,将数据送入了SBUF后就不再处理了,其实单片机将该字节发送后,会将TI置1,软件必须对TI再做清零操作,才能保证一次通讯发送真正完成,接口恢复到初始状态。采用在中断程序里发送数据的模式尤其容易在这里出错。2、如果通讯是由PC机触发的,可能还要查一下是否有清零...
  • 用51单片机做的很简单的一个双机串行通信程序(Proteus 7上的结果...
    答:方式0,不适合双方都是单片机的情况。方式0输出,由TXD输出时序脉冲;方式0输入,也要在TXD输出时序脉冲。方式0,适合于外接一个“被动”的串行设备。建议使用方式1,连线改成交叉形式即可。还要设置T1,控制波特率。
  • 关于计算机和单片机串行通信的问题。。
    答:我也遇到过这种情况,如果单片机处在上电就不停发数据的状态,那么很容易解释,并且在把单片机电源断掉后串口助手仍接“收到很多数据”,这是因为商店后大量数据存到缓冲区,而串口助手刷数据速度不够快。另外你说的单片机程序执行完了,主函数里面最后有没有用一个死循环(又称动态停机),如果没有那么...
  • 单片机串行通信的问题
    答:是在单片机端的程序中实现的,用串行口中断读出SBUF中的数据,再做判断来对应。if(RI){ //接受数据中断 a=SBUF; //读字符 RI=0; //清中断标志 } if(a==0x6b){ //判断字符是不是'k'P2^0=1;a=0x00; //清字符 }
  • 急救!!!做stc98c52单片机两机通信,出现怪问题,
    答:尽管对于两个单片机的通信这一块我同样还是还没有搞明白,但是有一点是值得我们共同注意的,就是我们用单个的单片机和电脑进行串行通信可能是正常的,是由于PC机作为一个超级终端,省去了很多我们不必要的关于他的设置。而两个单片机之间的异步串行通信却是不同的,首先检查波特率是否一致,在一个就是程序...
  • 80C51单片机的串行通信问题:发送的数据在上位机上显示不一致,是为什 ...
    答:你用的晶振是多少的哦?应该是你的上位机和单片机的波特率不一致的哦。晶振不能是整数倍的晶振哦。
  • 单片机与PC机的串行通信问题
    答:我是单片机新手我想做一个单片机与PC串行通信的,要实现的功能是,计算机发送不同数值,单片机连接的4个LED相应亮灭,各位高手,教教单片机程序怎么写比较好!我用的C8051单片机,我想... 我是单片机新手我想做一个单片机与PC串行通信的,要实现的功能是,计算机发送不同数值,单片机连接的4个LED相应亮灭,各位高手,教教...