首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > VxWorks >

串口接收数据不完整,该怎么解决

2013-01-22 
串口接收数据不完整本帖最后由 lzm 于 2010-09-08 16:48:08 编辑/**************************************

串口接收数据不完整
本帖最后由 lzm 于 2010-09-08 16:48:08 编辑


/*********************************************
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模式*/模式与驱动模式不匹配??

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

热点排行