可以对RS232(Com-Port)RTS / CTS / DTR / DSR进行低电平控制?

时间:2009-05-04 16:32:31

标签: winapi embedded serial-port handshaking

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

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

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

我记得在DOS下它是微不足道的。只需要直接对UART进行编程。这个功能在某种程度上在win32中存活了吗?

5 个答案:

答案 0 :(得分:5)

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

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

请注意,Win32 Serial Comm API和/或驱动程序可能非常糟糕,因此请准备好对线路上发生的事情进行一些调试。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

您仍然可以执行类似类型的编程,以获得实现设备驱动程序所需的受保护硬件。我认为自从20世纪80年代我做同样的工作以来,这变得更加容易了。

答案 3 :(得分:0)

微软是否真的在进行硬件握手?多年来,NT,win2000和XP都没有在硬件上进行握手。相反,当fifo达到某一点时,设备驱动程序将手动更改cts行。这意味着让设备驱动程序丢失数据非常简单,用鼠标抓住窗口并在屏幕周围做圆圈(确保在全部或部分通道上将该窗口从屏幕左侧移开)。按住Alt键进入全屏显示命令提示符是导致数据丢失的简单方法。或者导致足够中断延迟的任何其他因素。基本上微软硬件流控制不是硬件而是软件流控制,即使硬件确实具有硬件流控制功能,微软的驱动程序也没有设置那么一点。 SeaLevel最终支持这一点,好吧,你必须在SetCommState()中设置正确的无关设置才能启用它。

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

答案 4 :(得分:0)

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

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