• c# 串口调试助手


    串口调试助手

    发送什么返回什么 就是助手显示中文的时候出现乱码
    在这里插入图片描述

    using System.IO.Ports;
    
    • 1
    public static SerialPort serialPort1 = new SerialPort();
    
    • 1
    Byte[] readBuffer = new Byte[100];
    
    • 1

    Form1_Load

            private void Form1_Load(object sender, EventArgs e)
            {
       
                try
                {
       
                    Updata_Serialport_Name(ComComboBox1);  //调用更新可用串口函数,comboBox1为 端口 组合框名字
                    BaudComboBox2.Items.Add(115200);
                    BaudComboBox2.Items.Add(9600);
                    BaudComboBox2.Text = "115200";
    
                    
                    StopComboBox3.Items.Add(System.IO.Ports.StopBits.One);
                    StopComboBox3.Items.Add(System.IO.Ports.StopBits.OnePointFive);
                    StopComboBox3.Items.Add(System.IO.Ports.StopBits.Two);
                    StopComboBox3.Text = System.IO.Ports.StopBits.One.ToString();
    
                    DataComboBox4.Items.Add(8);
                    DataComboBox4.Text = "8";
    
                    CheckComboBox5.Items.Add(System.IO.Ports.Parity.None);//在表单中显示的就是enum的名字 而不是一串数
                    CheckComboBox5.Items.Add(System.IO.Ports.Parity.Odd);
                    CheckComboBox5.Items.Add(System.IO.Ports.Parity.Even);
                    CheckComboBox5.Text= System.IO.Ports.Parity.None.ToString();
    
                }
                catch (Exception ex)
                {
       
    
                    MessageBox.Show("串口打开异常" + serialPort1.PortName);
                }
               
            }
    
    
            /*用户自定义更新可用串口函数*/
            private static void Updata_Serialport_Name(UIComboBox MycomboBox)
            {
       
                //System.IO.Ports.SerialPort.GetPortNames()函数功能为获取计算机所有可用串口,以字符串数组形式输出
                string[] ArryPort = System.IO.Ports.SerialPort.GetPortNames(); //定义字符串数组,数组名为 ArryPort,将可用的串口信息存放在字符串中
                MycomboBox.Items.Clear();       //清除当前组合框下拉菜单内容                  
                for (int i = 0; i < ArryPort.Length; i++)
                {
       
                    MycomboBox.Items.Add(ArryPort[i]);   //将所有的可用串口号添加到端口对应的组合框中
                }
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    点击端口combobox按钮触发端口检查 更新

    注意这里的这个是click触发 不是直接双击触发的那个

            private void ComComboBox1_Click(object sender, EventArgs e)
            {
       
                ComComboBox1.Items.Clear();
                Updata_Serialport_Name(ComComboBox1);  //调用更新可用串口函数,comboBox1为 端口 组合框名字
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    打开串口

            private void OpenuiButton2_Click(object sender, EventArgs e)
            {
       
                try
                {
       
                    //在打开串口之前获取串口号和波特率
                    serialPort1.PortName = ComComboBox1.Text;
                    //转换为10进制,10可省略
                    serialPort1.BaudRate = Convert.ToInt32(BaudComboBox2.Text, 10);
    
                    Parity NIParity = (Parity)Enum.Parse(typeof(Parity), CheckComboBox5.Text);//字符串转枚举
                    serialPort1.Parity = NIParity;//这段再研究下 如何实现文本转enum中的某个值
    
                    //MessageBox.Show(StopComboBox3.Text);这个是none
                    //MessageBox.Show(StopComboBox3.SelectedText);这个打印出来是空白
                    StopBits NIStopBits = (StopBits)Enum.Parse(typeof(StopBits), StopComboBox3.Text);//字符串转枚举
                                                                                                     //serialPort1.StopBits = System.IO.Ports.StopBits.One;
                    serialPort1.StopBits = NIStopBits;
    
                    serialPort1.DataBits = Convert.ToInt32(DataComboBox4.Text, 10);
    
                    serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
    
                    serialPort1.ReceivedBytesThreshold = 1;
    
                    //打开串口
                    serialPort1.Open();
                    //打开串口按钮不可用,变成灰色
                    OpenuiButton2.Enabled = false;
                    //关闭串口按钮可用。
                    CloseuiButton3.Enabled = true;
                }
                catch (Exception ex)
                {
       
                     MessageBox.Show( ex.ToString());
                }
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    串口接收回调函数

            private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
       
                Thread.Sleep(30);//有一个数据就进来 然后这个是等数据变多了 在接受,此时是不会反复进入该函数的,因为都被挂起了 就无法进入了
    
                //字符串方式读缓冲区中的数据
                string str = serialPort1.ReadExisting();
                //把读取的数据添加至接收区。AppendText():向文本框的当前文本追加文本。
                String time = GetCurTime() + ":";
                this.Invoke((EventHandler)delegate
                {
       
                    RecevieTextBox1.AppendText("\r\n"+"接收" + time + str);
                });   
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    按照字节接收

                Thread.Sleep(30);
    
                int len = serialPort1.BytesToRead;
    
                Byte[
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    如何应对量化策略的失效
    阿里云服务器配置选择指南(2023新版教程)
    如何封装js来调用各开放平台打印组件,实现同步效果
    关于Java开发Idea中编码,解码以及解决中文乱码的实践经验
    influxdb
    数据结构——堆
    Lab: Xv6 and Unix utilities
    176. 第二高的薪水
    【汇编语言-王爽】第一章:基础知识
    xgp用什么加速器 xgp加速器免费推荐
  • 原文地址:https://blog.csdn.net/chengcao123/article/details/126935661