1 串口的初始化
设置串口的名称、波特率、数据位、校验位、停止位。
1 //获取本机所有串口的名字 2 String[] strPortName = SerialPort.GetPortNames(); 3 //将本机所有串口名称赋值给cmbPort控件 4 cmbPortName.ItemsSource = strPortName;
1 comPort.PortName = cmbPortName.Text; 2 comPort.BaudRate = int.Parse(cmbBaudRate.Text); 3 comPort.DataBits = int.Parse(cmbDataBit.Text); 4 5 //奇偶校验 6 switch (cmbPrity.SelectedIndex) 7 { 8 case 0: 9 comPort.Parity = Parity.None; 10 break; 11 case 1: 12 comPort.Parity = Parity.Odd; 13 break; 14 case 2: 15 comPort.Parity = Parity.Even; 16 break; 17 default: 18 comPort.Parity = Parity.None; 19 break; 20 } 21 //停止位 22 switch (cmbStopBit.SelectedIndex) 23 { 24 case 0: 25 comPort.StopBits = StopBits.One; 26 break; 27 case 1: 28 comPort.StopBits = StopBits.Two; 29 break; 30 default: 31 comPort.StopBits = StopBits.One; 32 break; 33 }
2 打开串口
1 comPort.Open();
3 关闭串口
1 comPort.Close();
4 串口的发送
1 comPort.Write(textSend.Text); //直接发送字符串
2 comPort.Write(bytes,0,str.Length); //发送字节数组
注意:为了可以发送和显示中文,设置以下属性即可。
comPort.PortName = cmbPortName.Text;
5 串口数据的接收
1 private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e) 2 { 3 4 string strData = ""; 5 6 //读去缓冲区字符数量 7 while (comPort.BytesToRead != 0) 8 { 9 if (!bHexSendState) //字符发送 10 { 11 //byte[] result = new byte[comPort.ReadBufferSize]; 12 //comPort.Read(result, 0, comPort.ReadBufferSize); 13 //strData = Encoding.UTF8.GetString(result); 14 15 strData = comPort.ReadExisting() + "\n"; 16 17 } 18 else 19 { 20 byte readBuffer = (byte)comPort.ReadByte(); 21 strData = Convert.ToString(readBuffer,16).ToUpper(); 22 if (strData.Length == 1) 23 strData = strData.PadLeft(2,‘0‘); 24 strData += " "; 25 } 26 27 28 Dispatcher.Invoke(new Action(() => 29 { 30 textRecv.AppendText(strData); 31 //滚动到底部 32 textRecv.ScrollToEnd(); 33 })); 34 } 35 }
原文:https://www.cnblogs.com/FengHandong/p/12056684.html