C#串口通信
C# 通信编程笔记:串口通信 / TCP 通信 / Socket 通信
一、串口通信 (Serial Port Communication)
1. 基本概念
串口通信是一种逐位(bit)传输数据的通信方式,常用于与**嵌入式设备**、**单片机**、**GPS模块**、**传感器**等硬件通信。
2. 核心类与命名空间
- **命名空间**:`System.IO.Ports`
- **核心类**:`SerialPort`
using System.IO.Ports; // 导入串口命名空间 using System; public class SerialExample { static SerialPort _serialPort; public static void Main() { // 1. 创建 SerialPort 对象 _serialPort = new SerialPort(); // 2. 配置参数(关键词) _serialPort.PortName = "COM3"; // 端口名 _serialPort.BaudRate = 9600; // 波特率 _serialPort.DataBits = 8; // 数据位 _serialPort.StopBits = StopBits.One; // 停止位 _serialPort.Parity = Parity.None; // 校验位 _serialPort.Handshake = Handshake.None; // 3. 注册 DataReceived 事件(接收数据) _serialPort.DataReceived += SerialPort_DataReceived; // 4. 打开串口 _serialPort.Open(); Console.WriteLine("串口已打开,等待数据..."); // 5. 发送数据(字符串或字节数组) _serialPort.WriteLine("Hello Device"); // 或发送字节: _serialPort.Write(new byte[]{0x01,0x02},0,2); Console.ReadKey(); _serialPort.Close(); // 6. 关闭串口 } // 数据接收事件处理方法 private static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { // 读取字符串(按行) string data = _serialPort.ReadLine(); // 直到换行符 // 或读取字节: int bytes = _serialPort.BytesToRead; byte[] buffer = new byte[bytes]; _serialPort.Read(buffer,0,bytes); Console.WriteLine($"接收到: {data}"); } }### 3. 关键术语解释
| 关键词 | 含义 | 说明 |
|--------|------|------|
| `PortName` | 端口名称 | 如 `COM3`、`COM5`,表示物理或虚拟串口 |
| `BaudRate` | 波特率 | 每秒传输的符号数,常见值:9600、115200 |
| `DataBits` | 数据位 | 每个字节的数据位数,通常为 8 |
| `StopBits` | 停止位 | 标识数据包结束,常为 `StopBits.One` |
| `Parity` | 校验位 | 检错方式:None(无)、Even(偶校验)、Odd(奇校验) |
| `Handshake` | 握手协议 | 流量控制:None、XOnXOff、RequestToSend |
| `Open()` / `Close()` | 打开/关闭串口 | 通信前必须打开,结束后关闭释放资源 |
| `DataReceived` | 数据接收事件 | 当串口收到数据时触发,需在事件处理器中读取数据 |
