AI智能
改变未来

C#实现串口通讯

C# 串口通信

  • 触发串口

触发串口

工作需要开发一个串口通讯的软件,我选择了C#语言,这里记录一下开发过程。

首先要申明一个串口:

using System.IO.Ports;  //引入包public SerialPort serialPort = new SerialPort();

然后要打开一个串口,打开串口很简单,open就好了,但是要打开哪个串口呢,这个时候就需要先获取计算机拥有的串口:

string[] SpNum = SerialPort.GetPortNames();

我写的是winform程序,在界面上是用ComboBox来显示本机串口的,所以要把获得的串口名添加进ComboBox下拉列表中:

if (SpNum.Length != 0)   //判断所获得的串口数不为0{for (int i = 0; i < SpNum.Length; i++){cbSelectCom00.Items.Add(SpNum[i]);cbSelectCom01.Items.Add(SpNum[i]);}}

在打开串口前,需要设置串口的属性,也就是波特率、数据位、校验位、停止位:

serialPort.DataBits = 8;serialPort.BaudRate = 9600;serialPort.Parity = Parity.None;serialPort.StopBits = StopBits.One;

选择一个要打开的串口,将它打开:

if (cbSelectCom00.SelectedItem == null)  //判断是否选择了串口,如果没有选择{MessageBox.Show(\"请先选择物理端口!\", \"提示\", MessageBoxButtons.OK, MessageBoxIcon.Information);this.cbSelectCom00.Focus();    //将鼠标聚焦在当前控件上}else   //如果选择了{try{if (cbSelectCom00.Enabled == true){pc0.serialPort.PortName = cbSelectCom00.SelectedItem.ToString();pc0.serialPort.Open();     //打开串口OpenCom00.Text = \"已打开\";cbSelectCom00.Enabled = false;OpenCom00.BackColor = System.Drawing.Color.Cyan;pc0.serialPort.ReceivedBytesThreshold = 1;      //多少个字节触发DataReceived事件pc0.comtag = 0;pc0.serialPort.DataReceived += new SerialDataReceivedEventHandler(pc0.serialPort_DataReceived);   //触发事件}else{pc0.serialPort.Close();OpenCom00.Text = \"打开\";OpenCom00.BackColor = Color.White;cbSelectCom00.Text = \"\";cbSelectCom00.Enabled = true;}}catch(Exception ex){MessageBox.Show(ex.ToString(), \"提示\", MessageBoxButtons.OK, MessageBoxIcon.Error);}}

serialPort.ReceivedBytesThreshold 是指接收到多少个字节后触发DataReceived事件;

public void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e){//读取缓存区数据//将数据写入串口}

读取缓存区的数据:

Thread.Sleep(80);int n = serialPort.BytesToRead;byte[] buff = new byte[n];serialPort.Read(buff, 0, n);

将数据写入串口:

byte[] Rx = new byte[70];serialPort.Write(Rx, 0, Rx.Length);

注意:我们都希望理想的状态是串口有规律的收发字节,不要丢包,我尝试了之后,用的比较笨的方法,就是Thread.Sleep()让线程等一下,避免接收的数据被新接收的数据覆盖,避免当前的数据包还没发完又写入新的数据包,这个要通过自己不断的测试找到那个合适的等待的时间。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » C#实现串口通讯