单片机模拟串口发送数据有时会漏发几个字节是什么原因?

2019-07-15 07:33发布

MCU:SC92F7321。之前我便发过串口的类似问题,在各位坛友的指点下已经得到解决,但经过反复测试,模拟发送串口存在如下问题:在发送过程中,有时会出现字节漏发的情况,本来想用分析仪之类的抓一下波形,但奈何在抓取过程中从不出现,真是让人无奈。功能就是硬件串口中断接收,再转IO口发送数据,实现一个IO口通信。           现在有两个怀疑对象:一个是程序写出BUG;一个是并非是MCU漏发,而是波形在那几个字节这儿畸变了,串口助手接收不认为是数据。(稍后附上发送相关代码),望各位大大指点下迷津
13.png
14.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
Green_LJ
2019-07-15 21:18
原来是单线通信,还以为是用其它GPIO转发。
你这个定时器定时发送程序,显然有很多需要完善的细节。
除了定时器,是否还有其它中断?
定时器的程序也不够精细,MCU机器周期是多少?从代码看,应该是1us,这个已经是比较慢速的MCU了。
定时器里关闭T0,赋值,计算输出是0还是1,都需要时间,导致实际输出波形严重偏离设计初衷。
1、进定时器,不可以暂时关闭T0
2、TH0永远赋值0xff,TL0是-103,也就是153,如果设置T0是16bit定时器,直接:
TL0+=153;TH0=0XFF;
这样没有计时误差。
由于TH永远是0XFF,直接用8bit重装载模式,更简单,也没有累计计时误差。
3、关于1和0的输出,中间计算判断占用时间,导致时序错误抖动,应该本次中断计算是1还是0,下次进中断时立即输出,这样每次输出不会前后抖动。
这些都是自己都可以分析出来的问题,示波器一看波形就知道了。

一周热门 更多>