【问题标题】:Win API serial port need to wait after initializationWin API串口初始化后需要等待
【发布时间】:2015-03-31 13:07:36
【问题描述】:

我有以下问题。我有一个应该与计算机通信的串行端口设备。事实上它是 Arduino Due 板,但我不认为它是相关的。

我使用CreateFile打开端口,然后使用GetCommState()&SetCommState()和GetCommTimeouts()&SetCommTimeouts()设置参数。

端口已正确打开 - 没有问题。但是此时我想检查设备是否已连接。所以我发送了一个特定的消息。该设备应该以某种方式响应,以便我知道它已连接。

现在问题是:只有在创建端口之后(在发送握手请求之前)放置 Sleep(1000) 才有效。看起来 WinAPI 需要一些时间才能开始使用该端口。因为睡眠解决方案通常不可用,我需要找到一些替代方案......

它不起作用我的意思是 ReadFile 超时。即使超时设置为 5 秒,它也会超时 - 请注意,睡眠间隔仅为一秒。所以看起来握手请求甚至没有发送。如果我将超时设置为 1 秒并将睡眠间隔设置为一秒,它就可以工作。如果我将超时设置为 5 秒但没有睡眠它不起作用。看到问题了吗?

我将尝试一些 NetworkMonitor,但我有点确定问题不在于设备......

【问题讨论】:

    标签: c++ windows winapi visual-studio-2013 arduino-due


    【解决方案1】:

    好的,在发布这个问题之前我可能已经搜索了更多。

    问题是,当您从 PC 打开连接时,Arduino 会自行重启。

    当您使用终端时,您首先连接并在几秒钟后写入,以便 Arduino 板有足够的时间启动并且您不会注意到这个东西。这让我很困惑,无法写下这个问题。

    对此有 3 种解决方案,其中只有 2 种值得一提:

    1)我在不知道这一切的情况下使用的解决方案(您等待大约一秒钟,让电路板再次启动......) 2)你通过修改你的Arduino板来禁用自动重置

    如果你问我,他们俩都很愚蠢,应该有一个开关或闪存变量来做到这一点......

    【讨论】:

    • 如果您有另一台可以用作编程器的设备,可能没有什么可以阻止您在 Due 中重新编程固件。 Pro-Mini 克隆在 Ebay 上的价格约为 4 美元...再添加 4 或 5 个用于 FTDI USB->串行板,您将获得 2 个低于 15 美元的产品。..
    猜你喜欢
    • 2019-07-19
    • 2018-03-15
    • 2016-07-27
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2020-11-01
    • 2023-03-10
    相关资源
    最近更新 更多