专家您好,串口发送方为430的232串口,接收方为PC串口,PC串口程序使用网上常用的串口精灵。 当将波特率设置的比较高时,比如9600或38400,传输一段正常数据后会有一大段时间出现数据异常(比如发送递增数据,会发生跳变)。 接收双方的波特率设置是一致的,请问原因何在
Richard Ma:
楼主说的数据异常除了丢帧以外还有别的吗?串口助手中接收的数据数量和430 UART串口发出的数据数量一致吗?
楼主可以试着先排除上位机软件显示问题,换个软件试试;如果确定软件没问题用示波器观测下数据发送的过程是不是每一帧都正常发送出来了,以判断出问题在上位机还是在MCU或者是232芯片
Peter_Zheng:
从两个方面考虑这个问题,首先检查一下硬件电路,是不是存在走线之类的影响。然后,检查软件配置,9600/38400的波特率不是很高,但是数据出现异常,需要从波特率,调制的配置方向去考虑,建议把UART这块的配置代码发出来检查一下。
Triton Zhang:
回复 Peter_Zheng:
估计楼主在MCU端时递加的发送一个数据,想在PC上验证效果。一般来讲这类错误和代码都无关,大多数问题都出现在上位机。
上位机接收到串口数据后放在一个缓冲里面,显示程序从缓冲里面取数,显示程序调用的速度往往小于接收缓冲的接收速度,这样很容易造成串口的缓冲溢出,或者显示的跳变。
给楼主提个建议,可以尝试下:
1. MCU端不要只发一个字节的数据,发一帧数据,每一帧的数据用回车符号结束。
2. 帧间距设置稍微长一点,给PC留足显示的时间
3. 在PC端会一行一行的显示你收到的数据,这样看到的情况比较清楚。
Hardy Hu:
这种情况有的时候是由于MCU部分串口的缓冲区没有管理好,在数据量大的时候,MCU来不及发送这么多数据,造成数据被覆盖等,9600的波特率,8N1模式每秒只能发送1066个Byte,也就是如果每10ms发一次数据,则只能发10个byte
Hardy Hu:
回复 Hardy Hu:
如果发送填的数据太多,则有可能造成楼主描述得那种情况,这个需要在软件上设计串口发送缓冲区,并对其进行有效控制。