USB串行虚拟COM端口:读取不工作,但写入工作

我使用embedded式硬件(通过TI:Piccolo Control Stick xxx69),它使用FTDI USB转串口转换器硬件。

在PC上,我有一个简单的VC ++应用程序,它试图通过虚拟COM端口(VCOM:通常是COM7)与硬件进行通信。

  • 我能够正确连接到端口。

  • 我能够将数据从应用程序/ PC发送到硬件,并且正确接收。 (所以,PC上的Tx工作正常),应用程序首先使用createfile(... ... ...) API打开连接,然后使用writefile(.. ... ..) windows apis写入端口直。

  • 令人惊讶的是,我无法从串口读取应用程序。 当我调用readfile(... ... ...) api时,它返回状态为TRUE,但是零字节被读取。 我尝试使用API​​监视软件,它显示内核api Ntreadfile(... ... ...) ,作为STATUS_TIMEOUT" [0x00000102]返回错误。这是令人惊讶的,因为写作的作品,但阅读不,虽然数据是在那里线。

数据是在线,因为当我使用正常的超级terminal软件,我能够正确读取控制器的数据,它是可见的。 [在控制器方面,因为我们可以看到超级terminal上的数据,所以没关系。

我不是Windows程序员,因为我处理微控制器。 所以,有一些帮助来解决这个问题会有很大的帮助。

最好的祝福,

-Varun

这是一个参考

Solutions Collecting From Web of "USB串行虚拟COM端口:读取不工作,但写入工作"

问题解决了。 我不得不添加等待,直到InQueue> 0(这意味着接收缓冲区中至少有1个字节)或超时(作为安全出口)结束。 这将阻止通话,但目前我的应用程序是可以的。 waitComm()在我这里工作不好。

示例代码片段:

 while(1) { ClearCommError((HANDLE)*h_drv, (LPDWORD)&Err, &CST); if((CST.cbInQue >0)||(count >1000000)) break; count++; }