当前位置: 代码迷 >> VxWorks >> 串口接收数据不完整,该如何解决
  详细解决方案

串口接收数据不完整,该如何解决

热度:8793   发布时间:2013-02-26 00:00:00.0
串口接收数据不完整
C/C++ code
/*********************************************    UART1初始化程序*********************************************/STATUS UART1P_Init(void){    sfd = open("/tyCo/1",O_RDWR,0);            if(sfd!=ERROR)    {                 ioctl(sfd, FIOSETOPTIONS, OPT_RAW);            /*RAW模式*/        ioctl(sfd, FIOBAUDRATE, 9600);                /*9600 bps*/           ioctl(sfd, SIO_HW_OPTS_SET, CS8|PARENB);                return OK;    };        return ERROR;        }//主要接收代码            while(1)            {                stat = *((unsigned int *)(USTAT1));                if((stat&UART1_TC)==UART1_TC) break;            };                           *((unsigned int *)(UCON1)) |= 0x20;                     for(i=0,sum=0;i<100;i++)            {                ioctl(sfd,FIONREAD,(int)&len);                            if(len>0)                {                                                    len = read(sfd,rbuf+sum,1023-sum);                       sum += len;                };                    taskDelay(10);                        };


外接设备数据格式:起始位1位,数据位8位,可编程的第9位,停止位1位。
返回的通讯数据共19个字节,现在最多收到11个字节,但是用PC串口模拟发送,接收正常

------解决方案--------------------------------------------------------
波特率的问题?
------解决方案--------------------------------------------------------
/*RAW模式*/模式与驱动模式不匹配??

------解决方案--------------------------------------------------------
我个人猜想:
由于串口接收是没有标志的,只能通过超时去判断接收安毕。
你现在的现象是:接收到的数据帧长度不稳定。
我觉得很可能是你设备发出数据超时和你板子接收超时不匹配。
你可以试试将接收数据设备的接收超时设置长一些。看看能不能解决该问题。
  相关解决方案