串口通信为什么偶尔会丢一个字节? 5C

我用zedboard的板子与PC机通信,用

 xil__printf

打印中文时偶尔会出现乱码,用ascii码进行对照,发现会丢一个字节,而且这个丢字节的位置几乎总是在最后一个中文字的首字节。
我的编码是GBK,通信协议115200, 8, n, 1 (8数据位,无校验位,1停止位)。
各位大侠有什么解法吗?

12个回答

建议使用逻辑分析仪(小的一般就十几二十块钱)采集串口发送的数据,这样分析非常有用,如果确认发送的数据少一个字节,可以排查软件问题。建议尝试使用原始串口发送函数单个字节发送,看是否有这个问题,如果没有,则可能是上层发送字符串函数问题

我以前也出过这问题,是用stm32f103的芯片时发现的,之前是检测的RESET位就出现丢码的问题,后来我把发送代码改成下面的就好了。
for(i = 0; i < 66; i++)
{
USART_SendData(USART1,data[i]);

while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) != SET);
}

u010132497
阿苏尔 回复liubaosen: 不是的,我之前也是有等待的,只不过等待的是RESET标志位,而不是TXE标志位
2 年多之前 回复
liubaosen
liubaosen 也就是说添加一个等待就好了?
2 年多之前 回复

这个应该是板子底层串口驱动程序问题,丢数据了最后自己数据,可以用示波器看下原因

有干扰吧,驱动也有可能不兼容

可能是数据不一致,可以设置7或8位

双字节和单字节的区别造成的!

liubaosen
liubaosen 有什么区别?有解决方案吗?
2 年多之前 回复

看下线是否太长,波特率是否设置正确等

建议你先用 串口调试工具测试板子 是否它自身就有问题。然后在编写你的程序

应该是干扰,可以试试吧波特率降低

使用BusHound串口抓包测试看看是底层硬件发出的数据是否丢包,然后再检查硬件干扰部分

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐