Win API串口需要在初始化后等待

时间:2015-03-31 13:07:36

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

好的,我可能会在发布此问题之前再搜索一下。

当您从PC打开连接时,Arduino会自动重启。

当你使用终端时,你先连接并写几秒钟,以便Arduino板有足够的时间启动,你不会注意到这一点。这让我很困惑地写了这个问题。

有3个解决方案,其中只有2个是有道理的:

1)我在不知道所有这些的情况下使用的解决方案(等待一秒钟让电路板再次启动......) 2)通过修改Arduino板禁用自动复位

如果你问我这两个都是愚蠢的,应该有一个开关或一个flash变量来做这个......