在windows中轮询CTS线路的状态
Posted
技术标签:
【中文标题】在windows中轮询CTS线路的状态【英文标题】:poll the status of CTS line in windows 【发布时间】:2017-04-13 12:36:19 【问题描述】:你好 *** 用户!
我需要在 Windows 环境下轮询我的串口的 CTS 线, 我已经成功打开了COM口,
HANDLE hSerialIn;
const char* pcCommPort = TEXT("COM3");
hSerialIn = CreateFile(pcCommPort, GENERIC_READ | GENERIC_WRITE, \
0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
那我想要这样的东西
DCB dcb = 0 ;
while (GetCommState(hSerialIn, &dcb))
if (dcb.fOutxCtsFlow)
;
else
;
我对 COM 端口感兴趣的背景是,我有一个 USB->UART 转换器,它连接到测量设备的触发输出,这个设备每秒触发输出,我想把它放进去我的程序。当我通过 Hercules(终端应用程序)连接到 COM 端口时,它可以工作,我看到我的 CTS 线路每秒都在变化。那么如何查看CTS线路的状态呢?
提前致谢。
【问题讨论】:
为了挑剔,您想切换作为输出的 RTS(请求发送),它应该连接到作为输入的 CTS(清除发送)。这些信号仅存在于 RS-232 中,而不存在于 USB 中。 工作解决方案低于DWORD dwModemStatus; BOOL fCTS = 0; if (!SetCommMask(hSerialIn, EV_CTS)) DWORD err = GetLastError(); printf("\nHandle creation error code: %x\n", err); DWORD dwCommEvent; while(1) if (!WaitCommEvent(hSerialIn, &dwCommEvent, NULL)) // An error occurred waiting for the event. printf(""); else if (!GetCommModemStatus(hSerialIn, &dwModemStatus)) // Error in GetCommModemStatus; return; fCTS = MS_CTS_ON & dwModemStatus; if(fCTS) printf("%x ", fCTS);
您应该将其发布为您自己问题的答案,而不是发表评论。这样做非常好,并且在 Stack Overflow 上受到鼓励。
【参考方案1】:
DWORD dwModemStatus;
BOOL fCTS = 0;
if (!SetCommMask(hSerialIn, EV_CTS))
DWORD err = GetLastError();
printf("\nHandle creation error code: %x\n", err);
DWORD dwCommEvent;
while(1)
if (!WaitCommEvent(hSerialIn, &dwCommEvent, NULL)) // An error occurred waiting for the event.
printf("");
else
if (!GetCommModemStatus(hSerialIn, &dwModemStatus)) // Error in GetCommModemStatus;
return;
fCTS = MS_CTS_ON & dwModemStatus;
if(fCTS)
printf("%x ", fCTS);
【讨论】:
以上是关于在windows中轮询CTS线路的状态的主要内容,如果未能解决你的问题,请参考以下文章
如何避免在 React Native 中轮询服务器以获取新数据?