【C#】串口通信汇总
一、多串口多线程接收数据
https://blog.csdn.net/shouwang1994/article/details/78656840
二、串口发送数据移位
https://blog.csdn.net/jack__linux/article/details/79382315
三、串口传输中文字符
发送:
Encoding gb = System.Text.Encoding.GetEncoding("gb2312");
byte[] bytes = gb.GetBytes("中文");
serialPort1.Write(bytes, 0, bytes.Length);
接收:
int ilen = serialPort1.BytesToRead;
byte[] bytes = new byte[ilen];
serialPort1.Read(bytes, 0, ilen);
string xx =System.Text.Encoding.Default.GetString(bytes); //xx="中文";
四、读取串口信息并解析信息(字符串)
https://blog.csdn.net/qq_38069903/article/details/105948650
五、适用于长消息传输的串口通讯
https://cloud.tencent.com/developer/ask/sof/1406679/answer/1932021
六、问题汇总
(1)串口通信运行报错System.InvalidOperationException
https://zhidao.baidu.com/question/2075790621619581028.html
(2)停止位详解及设置为None或1.5时报错
这里所说的位并不是bit,所谓的停止位实际上是一个时间长度。这个时间长度与串口通信的波特率有关,通信所用波特率的倒数值
即为1位,它在实际中表示为一个时间段。
由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不
仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数
据传输率同时也越慢。
(1)设置为None失败原因
枚举不合法。MSDN明确规定,设置None会报错。
(2)设置为1.5失败原因
1)MSDN中明确规定,数据位只能为5至8位。
2)当数据位为6、7、8位时,停止位只能配置成1或2位;同样当数据位为5位时,停止位只能为1或1.5位
(3)串口ReadTimeout 超时异常
“System.TimeoutException”类型的未经处理异常在 System.dll 中发生 其他信息: 操作已超时。
1、超时原因:
是因为使用了SerialPort.ReadTimeout 方法和 SerialPortObj.ReadLine()方法。其中,SerialPort.ReadTimeout方法是设定读取的时间间隔。此外, SerialPortObj.ReadLine()表示读取接收缓存区的字节,如未在SerialPort.ReadTimeout设定的时间间隔内收到信息,则抛出异常。
ReadLine()方法是阻塞的,直至遇到一个换行符后返回。在读取数据时,如果一直没有遇到换行符,那么在等待ReadTimeout时间后,抛出一个TimeoutException。默认情况下,ReadTimeout为InfiniteTimeout。这样,ReadLine一直处于阻塞状态,直至有新一行数据到达(这段话可以完美说明阻塞问题)。WriteLine()方法也是阻塞的,如果另一方不能及时接收数据,就会引起TimeoutException异常。
2、正确使用方式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!