近来,在做通过一个小东西。单片机用的是STC12C5A32S2,调用Znfat32文件系统把SD卡里的文件通过串口发送出来。
这里有一个简单的协议,上位机(一个设备)发送一个05过来,我调用文件的256字节发送出去,一直到文件的结束。
现在的问题是:上位机发出的第258个05我没有收到,所以到这里就停止了,文件没有发送结束。但是此时我自己通过串口发送一个05进去,数据可以发出来,而且数据是对的。
难道是波特率的问题吗 ?
不知道是哪里出现问题了呢?请求大家帮忙解决,不甚感激。。。
------解决方案--------------------
你确定你发送的数据顺序正确吗。
高位在前,还是低位在前,记住,是二进制。
------解决方案--------------------
前面257次都正确,说明不是波特率问题,很有可能是代码漏洞
------解决方案--------------------
1. 首先,是否是每次测试都只能收到第257个05呢,如果是,肯定是你的代码有问题,可能是你那个计数变量有问题,是否定义成unsigned char 类型了,它跟256很接近呢。
2. 不知你串口数据怎么收的,是否用的中断,是否是因为哪里关中断时间过长了呢。
3. 个人认为你的协议缺少检错和重传机制,这样程序的健壮性很差。
------解决方案--------------------
stc是1T的,是否发送的两个字节间隔时间短?
------解决方案--------------------
unsigned char buf[129]; //数据缓冲区,用于存储读取的文件数据
idata unsigned char buf1[129];
--------------------
增大缓冲区试试