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

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

 xil__printf

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

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

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

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

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

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

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

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

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

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

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

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

我也遇到过这样的问题,是由于线路太长信号衰减,解决的方案只使用后6位传送数据。

我也在用zedboard,你这个问题和你电脑上的串口软件有关系吧,你去设置一下,不行的话就去换一个串口软件,一般官方都会有串行通信的例子,你可以参考一下他们的,当然也不排除是因为信道干扰,一般末尾的字节是很容易受噪音干扰而出现误码的