别人没那么重要,我也没那么重要,好好活着,把能做的小事做好,够不到的东西就放弃,承认就好。做一个心情好能睡着的人,你所有事情都会在正轨上。

【C#】串口通讯及其常用操作

1. 概述

  1. 此代码以类的形式提供,类名为:SerialManager
  2. 涵盖操作有:初始化波特率、打开 SerialPort、关闭 SerialPort 等操作;

2. 命名空间

1 using System;
2 using System.Collections.Generic;
3 using System.IO.Ports;
4 using System.Linq;
5 using System.Text;
6 using System.Threading.Tasks;

3. 代码说明

3.1. 变量/字段

1 private SerialPort serialPort = new SerialPort();
2 public static bool IsOpen { get; set; }  //标志量

3.2. 初始化波特率

 1 public void InitlizeBaudRate(out string[] baudRate)
 2 {
 3     baudRate = new string[]{};  //初始化
 4     baudRate[0] = "2400";
 5     baudRate[1] = "4800";
 6     baudRate[2] = "9600";
 7     baudRate[3] = "19200";
 8     baudRate[4] = "38400";
 9     baudRate[5] = "57600";
10     baudRate[6] = "115200";
11 }

3.3. 打开SerialPort

 1 public void OpenSerialPort(string portName, int baudRate)
 2 {
 3     serialPort.PortName = portName;
 4     serialPort.BaudRate = baudRate;
 5     //serialPort.Parity = Parity.None;
 6     //serialPort.StopBits = StopBits.One;
 7     //serialPort.DataBits = 8;
 8     serialPort.Open();
 9     IsOpen = true;
10 }

3.4. 关闭SerialPort

1 public void CloseSerialPort()
2 {
3     if (serialPort.IsOpen)
4     {
5         serialPort.Close();
6     }
7 }

3.5. 写入数据

1 public void WriteToSerialPort(string data)
2 {
3     if (serialPort.IsOpen)
4     {
5         serialPort.WriteLine(data);
6     }
7 }

3.6. 读取数据

 1 public string ReadFromSerialPort()
 2 {
 3     if (serialPort.IsOpen)
 4     {
 5         return serialPort.ReadExisting();
 6     }
 7     return null;
 8 }
 9 
10 public string ReadLine()
11 {
12     if (serialPort.IsOpen)
13     {
14         return serialPort.ReadLine();
15     }
16     return null;
17 }

3.7. 丢弃缓冲区中的数据

1 public void DiscardInBuffer()
2 {
3     if (serialPort.IsOpen)
4     {
5         serialPort.DiscardInBuffer();
6     }
7 }

3.8. 数据接收事件处理

1 private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
2 {
3     string data = serialPort.ReadExisting();
4     // 这里可以触发一个事件,让其他部分的代码知道有数据接收
5     OnDataReceived(data);
6 }

3.9. 数据接收事件

1 public event EventHandler<string> DataReceived;
2 
3 protected virtual void OnDataReceived(string data)
4 {
5     DataReceived?.Invoke(this, data);
6 }

 

时间:2025年3月14日

posted @ 2025-03-14 13:25  一路狂奔的乌龟  阅读(51)  评论(0)    收藏  举报
返回顶部