1

我编写了一个简单的 winform 应用程序来读取从微控制器接收到 RS232 DE9 串行端口的数据。我需要控制何时发送数据,因此我为此控制了 RtsEnable 属性。程序结构类似于这样。

byte[] data = new byte[serialPort1.BytesToRead];
serialport1.RtsEnable = true;

private void serialPort1_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e)
{
    serialPort1.Read(data, 0, data.Length);
    serialport1.RtsEnable = false;
    this.Invoke(new EventHandler(ProcessData));
    serialport1.RtsEnable = true;
}

现在,问题很简单。当 RtsEnable 一开始设置为 true 时,实际上并没有设置为 true。当然,当我调试时,它显示为 RtsEnable = true。但是当我检查电路中的电压时,RTs 仍然不高。

我认为我的电路没有问题,因为我手动检查了 serail 端口的电压输出。所以,我认为这与我的代码有关。

知道为什么会这样吗?提前致谢

4

1 回答 1

-1

RtsEnable 不设置 RTS,它只允许设置它。要设置(拉低)RTS(以及类似的 DTR),您需要将握手设置为 XonXoff。

例子:

   private void btnReset_Click(object sender, EventArgs e)
    {
        comm.MycomPort.RtsEnable = true;
        comm.MycomPort.Handshake = System.IO.Ports.Handshake.XOnXOff;
        comm.MycomPort.RtsEnable = false;
    }

这将暂时将 RTS 拉低(或 DTR,如果您使用 MycomPort.DtrEnable)它将保持低电平直到禁用,因此您可以添加一个计时器以在任何时间保持低电平。

于 2014-01-24T10:05:01.863 回答