Windows 启用RTS\u控制\u切换时,快速手动切换RTS

Windows 启用RTS\u控制\u切换时,快速手动切换RTS,windows,winapi,serial-port,Windows,Winapi,Serial Port,在Windows XP上,我打开了一个标准(主板上)RS-232串行端口,并配置了 dcb.fRtsControl = RTS_CONTROL_TOGGLE; 这适合我的需要 现在,虽然没有等待接收,但有时我需要在应用程序的控制下短暂切换RTS线路。我不能只调用EscapeCommFunction,因为启用RTS\u CONTROL\u切换时会失败 我试图做到这一点: dcb.fRtsControl = RTS_CONTROL_ENABLE; // manual RTS control and

在Windows XP上,我打开了一个标准(主板上)RS-232串行端口,并配置了

dcb.fRtsControl = RTS_CONTROL_TOGGLE;
这适合我的需要

现在,虽然没有等待接收,但有时我需要在应用程序的控制下短暂切换RTS线路。我不能只调用EscapeCommFunction,因为启用RTS\u CONTROL\u切换时会失败

我试图做到这一点:

dcb.fRtsControl = RTS_CONTROL_ENABLE; // manual RTS control and turns on RTS
SetCommState( hDevice, &dcb );
dcb.fRtsControl = RTS_CONTROL_TOGGLE; // turns off RTS since there is no TX pending
SetCommState( hDevice, &dcb );
然而,这似乎从未奏效。我从来没见过RTS开关。就像设备驱动程序注意到我刚刚设置了RTS,现在正在清除它,所以它只是中止了我正在做的事情

如果我在那里睡觉:

dcb.fRtsControl = RTS_CONTROL_ENABLE; // turn on RTS
SetCommState( hDevice, &dcb );
Sleep(1);
dcb.fRtsControl = RTS_CONTROL_TOGGLE; // turns off RTS since there is no TX pending
SetCommState( hDevice, &dcb );
然后我看到了切换,但它的长度变化非常大,从1到15毫秒不等(我想这是意料之中的)。我使用timeBeginPeriod设置1ms调度,并且我的线程已经具有高优先级(我应该转到实时优先级吗?)

那么,我能做些什么来“刷新”RTS对硬件的更改,这样我就不用睡觉了?我可以忙着等待(使用QueryPerformanceCounter等待我想要的时间),但我担心这仍然不会“刷新”对设备的RTS更改


谢谢。

原来我用来监视RTS线路的串行端口有故障。它是基于USB的,缺少短的转换

我在上面放了一个O型示波器,当我刚开始试着打开/关闭RTS时,我可以看到一个1ms的光点