1

我使用嵌入式硬件(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]. 令人惊讶的是,尽管数据在线,但写入有效,但读取无效。

数据在线,因为当我使用普通的超级终端软件时,我能够正确地从控制器读取数据并且它是可见的。[在控制器端,没关系,因为我们可以在超级终端上看到数据。

我不是 Windows 程序员,因为我处理的是微控制器。因此,在解决这个问题方面提供一些帮助将是非常有帮助的。

此致,

-瓦伦

这是一个参考

4

1 回答 1

1

问题解决了。我必须添加等待,直到 InQueue > 0(这意味着接收缓冲区中至少有 1 个字节)或超时(作为安全出口)结束。它会阻止呼叫,但目前对我的应用程序来说还可以。waitComm() 在这里对我来说效果不佳。

示例片段:

while(1)
    {
        ClearCommError((HANDLE)*h_drv, (LPDWORD)&Err, &CST);

        if((CST.cbInQue >0)||(count >1000000))
        break;

        count++;
    }
于 2014-04-05T15:16:24.697 回答