9

我想知道是否以及如何直接从 win32(旧的 C-API)控制 RS-232 握手线。

我想与一个外部硬件接口,两条简单的数据线就足以满足我的需要。

那么 - 是否有一个用于 win32 的 API 可以让我读取和写入四个状态行的状态?在正常的串行通信中,握手线由 UART 自动驱动(如果启用了硬件握手)。

我记得在 DOS 下它是微不足道的。只需直接对 UART 进行编程。这个功能是否以某种方式在win32中幸存下来?

4

5 回答 5

7

您可以使用 控制 RTS 和 DTR SetCommState()。您还可以设置硬件或驱动程序处理硬件流控制(CTS 和/或 DSR),或者您可以设置使用SetCommMask(),以便在这些信号发生变化时获取事件。

一个不错的概述在这里:http: //msdn.microsoft.com/en-us/library/ms810467.aspx

请注意,Win32 串行通信 API 和/或驱动程序可能很挑剔,因此请准备好对线路上发生的事情进行一些调试。

于 2009-05-04T16:43:21.890 回答
2

当我不得不做一个与 RS232 端口通信的项目时,我遇到了这个教程。这是一个关于如何打开端口、设置一些属性(包括超时、读/写和关闭端口)的完整示例。尽管您的项目现在可能已经结束,但我希望它仍然有用,因为它仍保留在 SO 档案中。

于 2009-06-26T01:34:46.560 回答
0

您仍然可以进行类似类型的编程,以获取您需要实现设备驱动程序的受保护硬件。我认为自 1980 年代我从事相同类型的工作以来,这变得更容易了。

于 2009-05-04T16:36:59.177 回答
0

微软现在真的在做硬件握手吗?多年来NT、win2000和XP在硬件上没有做握手。相反,当 fifo 达到某个点时,设备驱动程序将手动更改 cts 行。这意味着导致设备驱动程序丢失数据非常简单,例如用鼠标抓住一个窗口并在屏幕周围转圈(确保在所有或部分通道上将该窗口从屏幕左侧移开)。Alt-enter 以全屏显示命令提示符是导致数据丢失的一种简单方法。或者任何其他导致足够中断延迟的东西。基本上,微软的硬件流控制不是硬件而是软件流控制,即使硬件确实具有硬件流控制功能,microsft 的驱动程序也没有设置那个位。

至于控制信号的程序,请使用 SetCommState()。

于 2009-05-04T16:55:31.597 回答
0

有一些 USB 转串口适配器不支持 DTR/DSR/DCD 流量控制。所以这可能是你的情况。

http://www.digi.com/support/kbase/kbaseresultdetl?id=588

于 2014-03-13T06:31:04.763 回答