使用的类是SerialPort
SerialPort说明:SerialPort 类 (System.IO.Ports) | Microsoft Docs
思路如下:
打开串口:
自动获取串口并打开:
SerialPort sp;
int baudRate = 9600;
int dataBits = 8;
Parity check = Parity.None;
StopBits stopBits = StopBits.One
string[] ports = SerialPort.GetPortNames();
foreach(string m in ports)
{
sp = new SerialPort(m,this.baudRate,this.check,this.dataBits,this.stopBits);
sp.Open();
}
手动打开串口
使用一个Button控件控制
private void button1_Click(object sender,EventArgs e)
{
if(button1.tText == "打开串口")
{
sp.PortName = comboBox1.Text; //获取要打开的串口号
sp.BaudRate = Convert.ToInt32(comboBox2.Text, 10); //获取波特率
sp.DataBits = Convert.ToInt32(comboBox3.Text, 10); //获取数据位
//设置停止位
if (comboBox4.Text == "1")
{
sp.StopBits = StopBits.One;
}
else if (comboBox4.Text == "1.5")
{
sp.StopBits = StopBits.OnePointFive;
}
else if (comboBox4.Text == "2")
{
sp.StopBits = StopBits.Two;
}
//设置校验位
if (comboBox5.Text == "无")
{
sp.Parity = Parity.None;
}
else if (comboBox5.Text == "奇校验")
{
sp.Parity = Parity.Odd;
}
else if (comboBox5.Text == "偶校验")
{
sp.Parity = Parity.Even;
}
sp.Open();
}
}
发送消息
private void Send(string str)
{
if (sp.IsOpen)
{
try
{
sp.Write(str);
}
catch (Exception)
{
sp.Close();
}
}
}
接收消息
sp.DataReceived += new SerialDataReceivedEventHandler(Received);
private void Received(object sender, SerialDataReceivedEventArgs e)
{
int Leng = sp.BytesToRead;
byte[] buffer = new byte[Leng];
sp.Read(buffer,0,Leng);
Invoke((new Action(() =>
{
textBox1.AppendText(Encoding.ASCII.GetString(buffer));
})));
}