我编写了一个简单的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。但是当我检查电路中的电压时,RT仍然不高。
我不认为我的电路有问题,因为我手动检查了serail端口的电压输出。所以,我认为它必须与我的代码相关。
知道为什么会这样吗? 提前致谢
答案 0 :(得分:-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(如果使用MycomPort.DtrEnable,则为DTR) 它将保持低电平直到禁用,因此您可以添加一个计时器以保持低电平持续时间。