【问题标题】:Serial port programming in WindowsWindows中的串口编程
【发布时间】:2011-07-23 08:22:52
【问题描述】:

我正在帮助一位朋友完成他的电气工程项目。他正在构建一种设备,该设备将使用串行端口与某些软件进行通信。在 Windows 平台(Win7)上,如何直接读取和写入串行端口上的特定引脚? Windows 是否为此类事情公开了 API?

【问题讨论】:

    标签: c++ c winapi serial-port


    【解决方案1】:

    您可以使用 WaitCommEvent 函数来监控特定引脚。假设电压变化触发CTS信号,可以是这样的

    hCommn = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    ......
     WaitCommEvent(hCommn, EV_CTS, NULL);
    ......
    

    WaitCommEvent from MSDN

    【讨论】:

      【解决方案2】:

      是的,本质上您打开一个具有特殊名称的串行端口设备,例如COM1,然后像读取文件一样对其进行读写。使用的引脚(自然)将是串行发送和接收引脚。

      如果您想控制特定引脚但不一定以串行方式控制,则最好使用 parallel 端口。并口电压通常对TTL电平逻辑更友好,通常可以直接驱动。

      更新:如果您只需要根据您的评论切换一个引脚,您可以使用 DTR 线来完成此操作。请参阅EscapeCommFunction 函数文档了解如何执行此操作。

      【讨论】:

      • 电压不是问题,因为面包板电路将能够处理从 3 到 25V 的任何电压。理想情况下,我想做的是使用引脚向电路发送持续的 +3V 信号。我仍然可以使用串行端口执行此操作还是需要切换到并行端口?另外,你能指出我的任何代码参考吗?除了 CreateFile(...Com1...),MSDN 是否还有其他功能?
      • @user318811:Greg 说得对:对于这样的事情,您几乎肯定想要使用并行端口。串行端口上的引脚几乎完全由 UART 驱动,并且主要在时钟下驱动,因此通常不可能将线路保持在给定状态超过给定时间段(基本上,传输时间一个字节,无论你选择什么速度)。您可以降低串行端口的速度(例如,至 300 波特)以使其保持更长时间的状态,但这也会限制最大转换速率(例如,至 ~300/秒)。
      • 您可以将 DTR 线用作一个位控制,当您打开端口(在正确模式下)时它变为高电平,当您关闭它时变为低电平
      • DTR 和 RTS 可以工作。您需要一个二极管来保护电路免受其输出的负电压的影响。
      • 在并口编程方面,可以给我一些参考(记住我想要具体的管脚控制)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多