0

我在 Delphi Prism 下使用 SerialPort。我能够将字节发送到串口,但我无法从外部接收数据,因为 SerialPort 请求发送 (RTS) 线总是高或高。那么,您设置什么设置来自动切换 RTS 线?

这是我设置的串口属性:

SerialPort1 := new System.Io.Ports.SerialPort();
SerialPort1.BaudRate:=19200;
SerialPort1.DataBits:=8;
SerialPort1.DtrEnable:=true;
SerialPort1.Parity:=System.IO.Ports.Parity.Even;
SerialPort1.PortName:='COM1';//'/dev/ttyS0';
SerialPort1.ReadBufferSize:=3000;
SerialPort1.ReadTimeout:=1000;
SerialPort1.ReceivedBytesThreshold:=1;
SerialPort1.RtsEnable:=true;
SerialPort1.StopBits:=System.IO.Ports.StopBits.One;
SerialPort1.WriteTimeout:=1000;
SerialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(@MySerialData);
SerialPort1.Open;

我确实设置了 DTR。请求发送线是您控制何时读取和写入串行数据的方式。RTS 高则只能写入,RTS 低则只能读取。我们检查了示波器上的通信线,RTS 线一直是高电平,这意味着我们的程序只能发送字节,而不能从外部读取任何字节或数据。这就是 DataReceived 事件永远不会执行的主要原因,因为它永远不会看到任何传入的字节或数据。

所以,在查看了我的串口设置之后,你能告诉我我缺少什么吗?

4

1 回答 1

1

RTS 是输出,所以它与接收没有任何关系。尝试打开 DTR 和/或 CTS。

编辑:

尝试删除启用 RTS 的行并为 RTS/CTS 添加握手(不确定它在 Delphi 中到底是什么)。我知道别针的用途和它们应该做什么。你有显示这是如何接线的引脚排列吗?我假设 2 和 3 是交叉的,DTR 到 DSR 两个方向,RTS 到 CTS 两个方向。

于 2011-07-20T19:15:10.203 回答