標題: C++串口讀取如何讀取數(shù)據(jù)并顯示 [打印本頁]

作者: 菜鳥聯(lián)盟    時間: 2019-3-22 12:54
標題: C++串口讀取如何讀取數(shù)據(jù)并顯示
示波器發(fā)出一段波形,三個字節(jié),有起始位,1位停止位。
波形解碼如下
0000000001 0011110011 0100001011
用串口助手接收到的hex:009EA1
C++程序:
void com_init()
{
        COMSTAT ComStat;
        DWORD dwErrorFlags;

        hCom = CreateFile("COM1",//COM1口
        GENERIC_READ|GENERIC_WRITE, //允許讀和寫
        0, //獨占方式
        NULL,
        OPEN_EXISTING, //打開而不是創(chuàng)建
        0, //同步方式
        NULL);

        if (hCom == INVALID_HANDLE_VALUE)
                CloseHandle(hCom);
               
        SetupComm(hCom,1024,1024); //輸入緩沖區(qū)和輸出緩沖區(qū)的大小都是1024

        COMMTIMEOUTS TimeOuts;
        //設定讀超時
        //在讀一次輸入緩沖區(qū)的內(nèi)容后讀操作就立即返回,
        //而不管是否讀入了要求的字符。
        TimeOuts.ReadIntervalTimeout = MAXDWORD;
        TimeOuts.ReadTotalTimeoutMultiplier = 0;
        TimeOuts.ReadTotalTimeoutConstant = 0;
       

        //設定寫超時
        TimeOuts.WriteTotalTimeoutMultiplier = 100;
        TimeOuts.WriteTotalTimeoutConstant =   500;
        SetCommTimeouts(hCom, &TimeOuts);   //設置超時

        DCB dcb;
        GetCommState(hCom, &dcb);
        dcb.BaudRate = 9600;        //波特率為9600
        dcb.ByteSize = 8;           //每個字節(jié)有8位
        dcb.Parity = NOPARITY;      //無奇偶校驗位
        dcb.StopBits = ONESTOPBIT;  //1個停止位
        SetCommState(hCom, &dcb);
        ClearCommError(hCom,&dwErrorFlags,&ComStat);
}

void test_Version()
{
        int tbit = 0;
        unsigned char OutBuffer[4] = {0XAA,0xF1,0,0};
        unsigned char InBuffer[3]={0};
        DWORD wCount = 3;  //read bytes
        DWORD dwBytesWrite = 4;  //寫入字節(jié)數(shù)


        memset(InBuffer, '\0', 3);
        ReadFile(hCom,InBuffer,wCount,&wCount,NULL);
}

代碼也是之前人寫的,一知半解。我現(xiàn)在就想讀取到Inbuff[3](三個字節(jié)的對應波形的值)
目前讀取出來的全部都是0,請大蝦幫忙指點迷津。



作者: Ahchi    時間: 2019-3-22 15:20
看ReadFile的返回值吧,串口沒有數(shù)據(jù)來,函數(shù)就直接返回了。這函數(shù)不是阻塞的




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1