串口通信(Serial Communications)是指外设和计算机间通过数据信号线、地线等按位(bit)进行传输数据的一种通信方式,属于串行通信方式,能够实现远距离通信,长度可达1200米。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。
串口通信的接口标准有很多,有 RS-232C、RS-232、RS-422A、RS-485 等。常用的就是 RS-232 和 RS-485。串口通信使用的大多都是 DB9 接口,如下图。

1 载波检测(DCD) 2 接受数据(RXD) 3 发出数据(TXD) 4 数据终端准备好(DTR) 5 信号地线(SG) 6 数据准备好(DSR) 7 请求发送(RTS) 8 清除发送(CTS) 9 振铃指示(RI)
这里我们以 RS-232 接口进行演示。
1、数据包格式定为(10bytes):
帧头(0xAA,0x55),命令字(1byte),地址位(2bytes),数据位(2bytes),校验位(1byte,和校验),帧尾(0xFE,0xFE)
地址位和数据位都是高位在前。
数据封装方法:
//数据打包
private byte[] DataPackage(byte cmd, int addr, int data)
{
byte[] package = new byte[10];
package[0] = 0xAA;//帧头
package[1] = 0x55;
package[2] = cmd;//命令字
byte[] dataaddr = IntToByteArray(addr);
package[3] = dataaddr[0];//地址高字节
package[4] = dataaddr[1];//地址低字节
byte[] value = IntToByteArray(data);
package[5] = value[0];//数据高字节
package[6] = value[1];//数据低字节
package[7] = CheckSum(package);//校验位
package[8] = 0xFE;//帧尾
package[9] = 0xFE;
return package;
}
//将int转换成2位数组
private static byte[] IntToByteArray(int value)
{
int hvalue = (value >> 8) & 0xFF;
int lValue = value & 0xFF;
byte[] arr = new byte[] { (byte)hvalue, (byte)lValue };
return arr;
}
//得到和校验码
private byte CheckSum(byte[] package)
{
byte checksum = 0;
for (int i = 0; i < package.Length; i++)

本文介绍了串口通信的基本概念,强调了波特率、数据位、停止位和奇偶校验的重要性,并重点讲解了使用C#进行RS-232串口通信的步骤,包括数据包格式的设定、串口调用的封装以及模拟测试读写硬件版本号的示例。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



