学习备忘-源自 https://mp.weixin.qq.com/s/hDVD9Ij22KSHm7TUmETcmQ
前言
物联网(IoT)和嵌入式系统的开发中,串口通信是一项不可或缺的技术。C# 作为一种广泛使用的编程语言,同样支持多种方式进行串口通信。其中,SerialPortStream
库因其简单易用的API和强大的功能成为了众多开发者的首选。本文将详细介绍如何使用 SerialPortStream
库来进行高效的串口通信,并探讨其在实际项目中的应用。RJCP.DLL.SerialPortStream库RJCP.DLL.SerialPortStream库为C#串口通信提供强大支持,跨平台、高度可定制,集成基础功能如打开、配置串口和数据读写,以及高级功能包括事件处理、超时设置等,极大简化串口开发流程,适用于不同平台和复杂通信需求。为什么选择 SerialPortStream?SerialPortStream
是一个开源的 C# 库,它为开发者提供了一个简单而强大的 API 来处理串行通信。相比于传统的 System.IO.Ports.SerialPort
类,SerialPortStream
提供了更多的灵活性和性能改进,包括但不限于:支持异步非阻塞模式数据缓冲机制错误处理和异常报告自定义数据帧结束符跨平台支持: 适用于Windows、Linux和macOS等多个平台。高度可定制性: 提供灵活的配置选项,可满足不同串口通信需求。开源社区支持: 在GitHub上积极维护,可获取最新版本和社区支持。基础功能
高级功能
1、事件处理
// 添加数据接收事件处理程序
serialPort.DataReceived += (sender, e) => {
byte[] receivedData = new byte[serialPort.BytesToRead];
serialPort.Read(receivedData, 0, receivedData.Length);
Console.WriteLine($"Received: {Encoding.UTF8.GetString(receivedData)}");
};
2、超时设置
// 设置读取超时时间为100毫秒
serialPort.ReadTimeout = 100;
3、自定义流控制
// 自定义流控制为RTS/CTS
serialPort.Handshake = Handshake.RequestToSend;
完整示例以下是一个结合基础和高级功能的完整示例:
using System;
using System.Text;
using RJCP.IO.Ports;
class Program {
static void Main() {
using (SerialPortStream serialPort = new SerialPortStream("COM1")) {
// 基础功能:打开串口、配置参数
serialPort.Open();
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
// 高级功能:数据接收事件处理
serialPort.DataReceived += (sender, e) => {
byte[] receivedData = new byte[serialPort.BytesToRead];
serialPort.Read(receivedData, 0, receivedData.Length);
Console.WriteLine($"Received: {Encoding.UTF8.GetString(receivedData)}");
};
// 发送数据
byte[] dataToSend = Encoding.UTF8.GetBytes("Hello, Serial!");
serialPort.Write(dataToSend, 0, dataToSend.Length);
// 等待一段时间以接收数据
Console.WriteLine("Waiting for data...");
Console.ReadLine();
}
}
}