ch375设备模式下PC读取数据错误

设备端:单片机使用AT89S52,CH375选择设备模式,内置固件。使用断点2上传和下传数据。

1、通过本地按键,按一次往断点2写入64个0xAA。

2、下传数据,单个数据直接使用I/O驱动LED显示,多长度舍弃。


PC端调试:WinXP系统,调试开发环境LabCVI9.0和DEBUG372

1、使用DEBUG372,所有操作都正常。

2、LabCVI9.0能正常打开设备,获取PID VID。

3、LabCVI9.0可以正确下传数据。单个数据可以在LED上正确显示。

4、LabCVI9.0上传数据,使用带缓冲模式或不使用带缓冲模式,不能正确接收数据。接收到的数据长度为0。并且显示接收成功。


附部分LabCVI9.0代码:未贴出的代码包含了设备打开、获取PID VID、设备关闭。

//下传数据

int CVICALLBACK DOWNDATA (int panel, int control, int event,
        void *callbackData, int eventData1, int eventData2)
{//发送数据
    unsigned long datalen;
    unsigned char downdata;
    datalen = 1;
    if(event == EVENT_COMMIT)
    {
        GetCtrlVal(panel,PANEL_DOWNDATANUM,&downdata);
        if(CH375WriteData(0,&downdata,&datalen))
            SetCtrlVal(panel,PANEL_DISP,"发送成功\n");
        else
            SetCtrlVal(panel,PANEL_DISP,"发送失败\n");
    }
    return 0;
}

//设置缓冲模式和超时

int CVICALLBACK BUFUPLOAD (int panel, int control, int event,
        void *callbackData, int eventData1, int eventData2)
{
    if(event == EVENT_COMMIT)
    {
        CH375SetBufUpload( 0, 1 );
        CH375SetTimeout(0,5000,5000);
    }
    return 0;
}

//上传数据

int CVICALLBACK UPDATA (int panel, int control, int event,
        void *callbackData, int eventData1, int eventData2)
{
    char databuf[64]={0};
    char disbuf[64]={'0'};
    int datalen = 0;
    char i;
    char bufnum=0;
    if(event == EVENT_COMMIT)
    {
        if(CH375QueryBufUpload(0))
        {
            if(CH375ReadData(0,&databuf,&datalen))
                 SetCtrlVal(panel,PANEL_DISP,"接收成功\n");
            else
                SetCtrlVal(panel,PANEL_DISP,"接收失败\n");
        }
        else
            SetCtrlVal(panel,PANEL_DISP,"接收缓冲区无数据\n");
    }
    return 0;
}


先不要缓冲上传模式, int datalen = 64;CH375ReadData读数据之前要设置要读取数据长度。


只有登录才能回复,可以选择微信账号登录