【问题标题】:serial port (winAPI) : couldnt receive any data串口(winAPI):无法接收任何数据
【发布时间】:2012-11-04 01:37:45
【问题描述】:

我正在将一个字符“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]);
    }
}

【问题讨论】:

  • WaitCommEvent 返回 TRUE 吗?
  • 串口设置错误是典型的解释,尤其是握手线。使用 SysInternals 的 PortMon 将超级终端与您的代码进行比较。
  • 抱歉回复晚了。 patriiice -> 我已经对其进行了测试,它返回 TRUE Hans-> 也许我的设置有问题。我想发布我的整个代码,我创建一个新线程不是更好吗?
  • 当WaitCommEvent返回时dwCommModemStatus的值是多少?

标签: winapi serial-port


【解决方案1】:

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

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

请参阅WaitForSingleObject function (Windows) 和Wait Functions (Windows) 了解更多信息。

【讨论】:

  • 只有在使用重叠 IO 时才需要。他们包含的代码传递了 0,这意味着他们没有使用重叠 IO。
猜你喜欢
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多