C#中串口通信笔记

来源:互联网 发布:mac双系统时间不一致 编辑:程序博客网 时间:2024/05/20 11:20

1、设置相应的控件,并命名


2、打开串口按钮事件代码(  其中全局变量private SerialPort ComDevice = new SerialPort();)注:SerialPort需要使用using System.IO.Ports;

 private void usbOpenButton_Click(object sender, EventArgs e)
        {


            if (usbNumComboBox.Items.Count <= 0)
            {
                MessageBox.Show("没有发现串口,请检查线路!");
                return;
            }
            if (ComDevice.IsOpen == false)
            {


                ComDevice.PortName = usbNumComboBox.SelectedItem.ToString();
                ComDevice.BaudRate = Convert.ToInt32(baudComboBox.SelectedItem.ToString());
                ComDevice.Parity = (Parity)Convert.ToInt32(jiaoYanBitComboBox.SelectedIndex.ToString());
                ComDevice.DataBits = Convert.ToInt32(dataBitComboBox.SelectedItem.ToString());
                ComDevice.StopBits = (StopBits)Convert.ToInt32(stopBitComboBox.SelectedItem.ToString());


                try
                {
                    ComDevice.Open();
                    usbOpenButton.Enabled = false;
                    usbCloseButton.Enabled = true;
                    ComDevice.DataReceived += new SerialDataReceivedEventHandler(usbDataReceived);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }


            }


        }

3、usbDataReceived函数(数据接收函数)

 public void usbDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] ReDatas = new byte[ComDevice.BytesToRead];
            ComDevice.Read(ReDatas, 0, ReDatas.Length);//读取数据
            //以下为显示数据(默认HEX)
            StringBuilder sb = new StringBuilder();
            string text = sb.ToString().ToUpper();
            for (int i = 0; i < ReDatas.Length; i++)
            {
                sb.AppendFormat("{0:x2}" + " ", ReDatas[i]);
            }
            receviedTextBox.AppendText(sb.ToString().ToUpper());
           
        }

4、如果报出线程问题

需要在load函数中加入 

Control.CheckForIllegalCrossThreadCalls = false;

原创粉丝点击