COM端口打开的中断条件

时间:2014-10-23 10:20:01

标签: c winapi serial-port

我有一个用C开发的应用程序,用于打开COM端口并发送数据。这很好用,已经做了多年。

现在我有一个用户表现不正确。在我的代码打开COM端口的PC上,它会生成一个中断条件。它会在传输数据的第一个字节之前11ms执行此操作,此时传输将返回逻辑1.因此它是:

  • COM端口打开
  • 中断一段时间
  • 休息条件结束
  • 11ms后出现第一个开始位。

当他们在同一台PC上使用第三方终端程序时,打开COM端口时不会产生中断条件。

我仔细检查了我的电脑,确定发送信号保持在逻辑1,直到第一个起始位,正如预期的那样。

我没有其他用户报告此问题。此特定用户正在使用笔记本电脑扩展坞的COM端口。

我使用SetCommState和SetupComm配置COM端口。我在初始化结束时调用ClearCommError和PurgeComm。我使用CreateFile打开端口。

以下是我正在使用的端口配置:

mydcb.fBinary = TRUE;
mydcb.fParity = FALSE;
mydcb.fOutxCtsFlow = FALSE;
mydcb.fOutxDsrFlow = FALSE;
mydcb.fDsrSensitivity = FALSE;
mydcb.fOutX = FALSE;
mydcb.fInX = FALSE;
mydcb.fNull = FALSE;
mydcb.Baudrate = 19200;
mydcb.Parity = NOPARITY;
mydcb.StopBits = ONESTOPBIT;
mydcb.ByteSize = 8;
mydcb.fAbortOnError = FALSE;
mydcb.fDtrControl = DTR_CONTROL_DISABLE;
mydcb.fRtsControl = RTS_CONTROL_DISABLE;

COM端口打开:

comport = CreateFile(resourcename, GENERIC_READ | GENERIC_WRITE, 0,
  NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

这个问题是否与任何人敲响了什么?是否有任何关于在哪里寻找的提示或建议?

1 个答案:

答案 0 :(得分:2)

好的,我会尝试戴上我的Captain Obvious帽子。

您是否在打开后立即尝试使用EscapeCommFunction()来明确清除端口的中断状态?也许那个特定用户的机器上的UART驱动程序是错误的,所以为什么不关注你想要的东西。