2012-11-15 21 views
0

我正在從PC發送一個字符'a'到MCU,並通過串行通信將其返回給PC。準確地說,它應該顯示'a',但沒有任何顯示。 我已經在超級終端上測試過,它工作正常。串口(winAPI):無法接收任何數據

如果我的代碼有任何問題,請指出。謝謝。

它發送一個字符我工作得很好所以我只發佈我的代碼的一部分。

DWORD dwCommModemStatus; 
DWORD dwBytesTransferred; 
DWORD bytesWritten; 
char receivedData[2] = {0}; 

char data= 'a'; 
bool sendChar = WriteFile(hSerial,&data,1,&bytesWritten,NULL); 
if(!sendChar){ 
    printf("WriteFile ERROR\n"); 
} 

SetCommMask(hSerial,EV_RXCHAR); 
WaitCommEvent(hSerial, &dwCommModemStatus,0); 

if(dwCommModemStatus & EV_RXCHAR){ 
    if(!ReadFile(hSerial,receivedData,1,&dwBytesTransferred,0)){ 
     printf("ReadFile Error\n"); 
    }else{ 
     printf("%c\n",receivedData[0]); 
    } 
} 
+0

WaitCommEvent返回TRUE? – patriiice

+2

串行端口設置錯誤是典型的解釋,特別是握手線。使用SysInternals的PortMon將超級終端與您的代碼進行比較。 –

+0

對不起,延遲迴復。 patriiice - >我測試了它,它返回TRUE Hans->也許我的設置有問題。我想發佈我的整個代碼,是不是更好地創建一個新的線程? – edisonthk

回答

0

我覺得WaitForSingleObject在上面的代碼中缺少。

如果WaitCommEvent返回false您必須等待。你可以用WaitForSingleObject來做到這一點。如果此方法返回WAIT_OBJECT_0,則可以使用ReadFile

有關更多信息,請參閱WaitForSingleObject function (Windows)Wait Functions (Windows)

+0

這隻在使用重疊IO時才需要。它們包含的代碼傳遞0意味着它們不使用重疊的IO。 – Deanna