C#-串口(一)_概念
一、串口与并口的概念:
1、串口(Serial Interface):
串行接口,指数据一位一位地顺序传递,其特点就是通讯线路简单,只要一对传输线就可以实现双向通讯,从而大大减低了成本,特别适合远距离通讯,但传送速度较慢。
(1)串口分类:单工、半双工、双全工;
(2)传输距离控制在15m之内;
(2)远距离传输需要使用“调制解调器(Modem)”或其他设备;
2、并口(Parallel Interface):
指采用并行传输方式来传输数据的接口标准。从最简单的一个并行数据寄存器或专用接口集成电路芯片如8255、6820等,一直至较复杂的SCSI或IDE并行接口,种类有数十种。
(1)以并行方式传输的数据通道的宽度,也称接口传输的位数;
(2)用于协调并行数据传输的额外接口控制线或称交互信号的特性。 数据的宽度可以从1~128位或者更宽,最常用的是8位,可通过接口一次传送8个数据位。
3、串口与并口:
串口就像一条车道,而并口就像有8条车道,同时刻能传输8位数据。由于8位通道之间的相互干扰,传输时速度就受到了限制,传输容易出错。串口没有互相干扰,并口能同时发送的数据量较大,但速度比串口慢。
二、接口标准:
1、SPI协议(Serial Perpheral interface):
同步串口接口;SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通讯,从而交换信息。
2、UART协议:
(1)TTL电平串口:
(2)SR-232、SR-422、SR-485电平串口:
采用DB9线或者DB25线,俗称com线。
三、区分RS-232和RS-485协议:
在RS232协议中,数据传输采用异步传输方式,常见的是1个起始位、8个数据位、无校验位、1个停止位。此外,RS232是单工模式,只能实现单向数据传输,不能同时发送和接收数据。
在RS485协议中,支持半双工或全双工通信,可以同时进行数据发送和接收。它的物理层标准采用差分信号传输,抗干扰性能较强,并且允许多个设备共用一条总线。RS485数据帧是由起始位、地址码、功能码、数据码及校验码组成,其中地址码可区分多个设备。
要在项目中区分他俩,需要查看设备厂商定义的手册。下面为C#针对两种协议进行传输的参考代码:
1、RS232 串口通讯
1)引入 System.IO.Ports 命名空间
using System.IO.Ports;
2)创建 SerialPort 实例,并设置相应的属性
SerialPort serialPort = new SerialPort();
serialPort.PortName = "COM1"; // 设置串口号
serialPort.BaudRate = 9600; // 设置波特率
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
serialPort.Parity = Parity.None;
3)打开串口并进行读写操作
serialPort.Open(); // 打开串口
serialPort.Write("Hello, world!"); // 向串口写数据
string data = serialPort.ReadExisting(); // 从串口读取数据
serialPort.Close(); // 关闭串口
2、RS485 串口通讯
1)确认串口适配器是否支持硬件流控(如:RS485转换器)。
2)修改串口属性,包括停止位、奇偶校验、流控等与 RS485 相关的参数
serialPort.PortName = "COM1";
serialPort.BaudRate = 9600;
// RS485 通讯需要配置的属性
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.Two; // 注意此处为 2 个停止位,可用1、1.5
serialPort.DataBits = 8;
serialPort.Handshake = Handshake.RequestToSend;
// RS485 的读写方式需要特别设置
serialPort.ReadTimeout = 500; // 读超时
serialPort.WriteTimeout = 500; // 写超时
serialPort.RtsEnable = true; // 设置 Request-To-Send 线路为高电平
3)在进行读写操作时留出时间间隔
sp.Open();
byte[] sendMessage = new byte[] { 0x01, 0x02, 0x03, 0x04 };
sp.Write(sendMessage, 0, sendMessage.Length);
Thread.Sleep(100);//发送与接收之间留出时间间隔
byte[] receiveMessage = new byte[sp.BytesToRead];
sp.Read(receiveMessage, 0,
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/17204561.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2022-03-10 3D打印机
2021-03-10 Linux-SQLite错误: System.DllNotFoundException: SQLite.Interop.dll\n