我使用嵌入式硬件(TI:Piccolo Control Stick xxx69),它使用FTDI usb到串行转换器硬件。
在PC上,我有一个简单的VC ++应用程序,它试图通过虚拟COM端口(VCOM:通常是COM7)与硬件进行通信。
我可以正确连接到端口。
我可以将数据从应用程序/ PC发送到硬件,并且可以正确接收。 (因此,PC上的Tx工作正常),应用程序首先使用createfile(... ... ...)
API打开连接,然后使用writefile(.. ... ..)
windows apis直接写入端口。
令人惊讶的是,我无法从串口读取应用程序。当我调用readfile(... ... ...)
api时,它返回状态为TRUE但是读取了ZERO字节。我尝试使用API监控软件,它显示内核api Ntreadfile(... ... ...)
,返回错误为STATUS_TIMEOUT" [0x00000102]
。令人惊讶的是,因为写入有效,但读取不起作用,尽管数据在线。
数据在线,因为当我使用普通的超级终端软件时,我能够正确地从控制器读取数据并且它是可见的。 [在控制器方面,它没问题,因为我们可以在超级终端上看到数据。
我不是Windows程序员,因为我处理微控制器。因此,在追求这个问题方面的一些帮助将会有很大的帮助。
最诚挚的问候,
-Varun
答案 0 :(得分:0)
问题解决了。我不得不添加等待直到InQueue> 0(表示接收缓冲区中至少有1个字节)或超时(安全出口)结束。它会阻止呼叫,但目前我的应用程序还可以。 waitComm()在这里对我不起作用。
示例代码段:
while(1)
{
ClearCommError((HANDLE)*h_drv, (LPDWORD)&Err, &CST);
if((CST.cbInQue >0)||(count >1000000))
break;
count++;
}