我从头开始尝试编写一个简单的控制台,与Windows 7计算机上的串口连接。
我正在使用:
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
namespace ConsoleApplication1
{
class Program
{
public static void Main()
{
SerialPort mySerialPort = new SerialPort("COM5");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
mySerialPort.Open();
mySerialPort.Write("This is a test");
Console.WriteLine("Press any key to continue...");
Console.WriteLine();
Console.ReadKey();
mySerialPort.Close();
}
private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.Write(indata);
}
}
}
到目前为止,我已运行此代码并与连接到我的计算机的xbee模块连接。该xbee模块将串行数据发送到另一个连接到msp430的xbee。 msp430被编程为接收它接收到的任何东西并回送它。这适用于我的代码。在我的控制台中,我会得到"这是一个测试"回到控制台窗口。
问题我遇到的是当我使用虚拟串行连接到putty窗口时。我正在使用它来尝试简化开发,而不是一直使用硬件。我将使用HHD Free Virtual Serial Ports在两个串行端口之间创建桥接连接。我将一个连接到putty终端,另一个将用于我的控制台程序。运行程序时,我收到错误。
"类型' System.TimeoutException'的第一次机会异常发生在System.dll"
中就行了
mySerialPort.Write("这是一个测试");
但是"这是一个测试"将出现在Putty终端上。 如果我删除" mySerialPort.Write("这是一个测试");" line并尝试将数据从Putty窗口发送到控制台窗口,不显示任何内容。
这再次适用于我的硬件解决方案。
请帮忙,我会尽力澄清任何问题。再次感谢你。
答案 0 :(得分:0)
我想问题出在你正在使用的虚拟实用程序中。它似乎设置pin states不正确。如果我使用2个putty实例并连接到桥接端口,我看到无限发送我输入的符号。所以我认为你的代码很好。
当我处理这些任务时,我使用一根特殊的电缆连接2个硬件com端口(com1和com2,如果没有它们,你可以试用usb-to-com转换器),它工作正常。
答案 1 :(得分:0)
我遇到了与HHD Free虚拟串行端口相同的问题,但这对异步写入操作非常有用。
您也可以替换
mySerialPort.Write("This is a test");
与(例如)
var buffer = Encoding.ASCII.GetBytes("This is a test");
mySerialPort.BaseStream.BeginWrite(buffer, 0, buffer.Length, ar => mySerialPort.BaseStream.EndWrite(ar), new object());