C# 串口编程,串口调试

使用serialPort实现串口调试助手。

private void btn_comopen_Click(object sender, EventArgs e)
        {
            try
            {                
                if (serialPort1.IsOpen)
                {                    
                    serialPort1.Close();   //关闭串口
                    btn_comopen.Text = "打开串口";
                    btn_comopen.BackColor = Color.ForestGreen;
                    comboBox1.Enabled = true;
                    comboBox2.Enabled = true;
                    comboBox3.Enabled = true;
                    comboBox4.Enabled = true;
                    comboBox5.Enabled = true;
                    txt_rcv.Text = "";  //清空接收区
                    txt_send.Text = ""; //清空发送区
                    toolStripStatusLabel1.Text = "串口已关闭";
                }
                else
                {
                    //串口已经处于关闭状态,则设置好串口属性后打开
                    comboBox1.Enabled = false;
                    comboBox2.Enabled = false;
                    comboBox3.Enabled = false;
                    comboBox4.Enabled = false;
                    comboBox5.Enabled = false;
                    serialPort1.PortName = comboBox1.Text;
                    serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);
                    serialPort1.DataBits = Convert.ToInt16(comboBox3.Text);

                    if (comboBox4.Text.Equals("无"))
                        serialPort1.Parity = System.IO.Ports.Parity.None;
                    else if (comboBox4.Text.Equals("奇数"))
                        serialPort1.Parity = System.IO.Ports.Parity.Odd;
                    else if (comboBox4.Text.Equals("偶数"))
                        serialPort1.Parity = System.IO.Ports.Parity.Even;
                    else if (comboBox4.Text.Equals("标志"))
                        serialPort1.Parity = System.IO.Ports.Parity.Mark;
                    else if (comboBox4.Text.Equals("空格"))
                        serialPort1.Parity = System.IO.Ports.Parity.Space;

                    if (comboBox5.Text.Equals("1"))
                        serialPort1.StopBits = System.IO.Ports.StopBits.One;
                    else if (comboBox5.Text.Equals("1.5"))
                        serialPort1.StopBits = System.IO.Ports.StopBits.OnePointFive;
                    else if (comboBox5.Text.Equals("2"))
                        serialPort1.StopBits = System.IO.Ports.StopBits.Two;

                    serialPort1.Open();     //打开串口
                    btn_comopen.Text = "关闭串口";
                    btn_comopen.BackColor = Color.Firebrick;
                    toolStripStatusLabel1.Text = "串口已打开";
                }
            }
            catch (Exception ex)
            {
                //捕获到异常,创建一个新的对象,之前的不可以再用
                serialPort1 = new System.IO.Ports.SerialPort();
                //刷新COM口选项
                comboBox1.Items.Clear();
                comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());                
                System.Media.SystemSounds.Beep.Play();//响铃并显示异常给用户
                btn_comopen.Text = "打开串口";
                btn_comopen.BackColor = Color.ForestGreen;                
                MessageBox.Show(ex.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                comboBox1.Enabled = true;
                comboBox2.Enabled = true;
                comboBox3.Enabled = true;
                comboBox4.Enabled = true;
                comboBox5.Enabled = true;
            }
        }

效果

代码传送门

以下是使用C#编写串口调试助手的步骤: 1. 创建一个Windows窗口应用程序。 2. 在窗口中添加一个文本框和一个按钮,用于输入和发送串口数据。 3. 在窗口中添加一个下拉框,用于选择串口号和波特率。 4. 在代码中引用System.IO.Ports命名空间,以便使用串口通信相关的类。 5. 在代码中实例化SerialPort类,并设置串口号、波特率、数据位、停止位、校验位等参数。 6. 在代码中编写串口数据发送和接收的相关函数,并将其与按钮单击事件关联。 7. 在代码中编写串口数据接收的事件处理函数,并将其与SerialPort类的DataReceived事件关联。 8. 在代码中添加异常处理,以便在串口通信出现错误时进行处理。 下面是一个简单的C#串口调试助手的代码示例: ```csharp using System; using System.IO.Ports; using System.Windows.Forms; namespace SerialPortDemo { public partial class Form1 : Form { private SerialPort serialPort; public Form1() { InitializeComponent(); serialPort = new SerialPort(); serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); } private void Form1_Load(object sender, EventArgs e) { string[] ports = SerialPort.GetPortNames(); foreach (string port in ports) { comboBox1.Items.Add(port); } comboBox1.SelectedIndex = 0; comboBox2.SelectedIndex = 0; } private void button1_Click(object sender, EventArgs e) { if (serialPort.IsOpen) { serialPort.Write(textBox1.Text); } } private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; string indata = sp.ReadExisting(); this.Invoke(new Action(() => { textBox2.AppendText(indata); })); } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { serialPort.PortName = comboBox1.SelectedItem.ToString(); } private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { serialPort.BaudRate = int.Parse(comboBox2.SelectedItem.ToString()); } private void button2_Click(object sender, EventArgs e) { try { if (!serialPort.IsOpen) { serialPort.Open(); button2.Text = "关闭串口"; } else { serialPort.Close(); button2.Text = "打开串口"; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值