串行端口(winAPI):无法接收任何数据

串行端口(winAPI):无法接收任何数据,winapi,serial-port,Winapi,Serial Port,我正在将一个字符“a”从pc发送到MCU,并通过串行通信将其返回pc。准确地说,它应该显示“a”,但没有显示。 我在超级终端上进行了测试,效果很好 如果我的代码有任何问题,请指出。多谢各位 我想它在发送字符时工作得很好,所以我只发布了部分代码 DWORD dwCommModemStatus; DWORD dwBytesTransferred; DWORD bytesWritten; char receivedData[2] = {0}; char data= 'a'; bool sendCha

我正在将一个字符“a”从pc发送到MCU,并通过串行通信将其返回pc。准确地说,它应该显示“a”,但没有显示。 我在超级终端上进行了测试,效果很好

如果我的代码有任何问题,请指出。多谢各位

我想它在发送字符时工作得很好,所以我只发布了部分代码

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]);
    }
}

我认为上面的代码中缺少
WaitForSingleObject

如果
WaitCommEvent
返回
false
您必须等待。您可以使用
WaitForSingleObject
执行此操作。如果此方法返回
WAIT\u OBJECT\u 0
,则可以使用
ReadFile


有关更多信息,请参阅和。

WaitCommEvent是否返回TRUE?典型的解释是串行端口设置错误,尤其是握手线路。使用SysInternals的PortMon将超级终端与您的代码进行比较。很抱歉,回复太晚。Patriice->我已经测试过了,它返回的是真的Hans->也许我的设置有问题。我想发布我的全部代码,创建一个新线程不是更好吗?当
WaitCommEvent
返回时,
dwCommModemStatus
的值是多少?这仅在使用重叠IO时才需要。它们包含的代码正在传递0,这意味着它们没有使用重叠IO。