串口通讯(Serial Communication),是指外设和计算机间,通过数据信号线、地线等,按位进行传输数据的一种双向通讯方式。
串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的通信协议,通信协议很多,可根据实际情况选择和自定义。
一、串口相关参数介绍
1、端口(COM口)
CMO口(Communication Module Outlet)是一种用于连接计算机和外部设备的接口,也称为串行端口,简称CMO口,常见串口通讯有一般电脑应用的RS-232(使用 25 针或 9 针连接器)和工业电脑应用的半双工RS-485与全双工RS-422。
电脑端口查看:设置->系统->关于->设备管理器->端口
2、波特率(Baud rate)
波特率是一个电子信号上的术语,用于描述信道的数据传输速度。
单位是bit/s,常见的9600波特率表示每秒传输9600个比特位,1个字节8位,9600/8=1200,代表每秒钟串口可传输1200个字节(不考虑起始位、停止位、校验位的情况下),注意:
- 波特率如果太高会导致传输数据不稳定,一般使用9600;
- 发送端与接收端波特率不一致会导致数据不一致;
3、起始位
起始位必须是持续一个比特时间的逻辑0电平,标志传输一个字符的开始,接收方可用起始位使自己的接收时钟与发送方的数据同步;
C#开发中一般不需要设置起始位。
4、停止位(StopBits)
停止位可以是是1位、1.5位或2位,可以由软件设定,它一定是逻辑1电平,标志着传输一个字符的结束;
C#开发中一般通过StopBits枚举类型设置停止位,枚举值包括None、One、Two、OnePointFive四种(通常若设备不指定,默认停止位为1位)。
5、数据位
数据位紧跟在起始位之后,是通信中的真正有效信息。数据位的位数可以由通信双方共同约定,一般可以是5位、7位或8位;
C#开发中若设备不指定,默认数据位为8位。
6、校验位
校验位仅占一位,用于进行奇校验或偶校验,检验位不是必须有的。如果是奇校验,需要保证传输的数据总共有奇数个逻辑高位;如果是偶校验,需要保证传输的数据总共有偶数个逻辑高位;
C#开发中通常使用Parity枚举类型来设置校验位,有五种,日常开发中使用最多的是None无校验、Odd奇校验、Even偶校验。
7、缓存区
串口包括两个缓存区,发送缓存区和接收缓存区;
发送缓存区:(软件)发送数据时将数据先存在发送缓存区,再通过(硬件)串口发送出去;
接收缓存区:接收数据时先将数据存在接收缓存区,(软件)再从中读取数据;
二、串口通信助手
串口通信助手是用于测试和调试串口通信的工具,可通过串口与外部设备通信,提供界面来监视和控制串口数据的接收和发送,从而验证串口通信是否正常工作。
实现一个串口通信助手示例:C#Wpf-实现串口通信助手
分享一个串口通信助手,下载地址:友善串口通信助手
提取码: h64y
三、虚拟串口工具
下载地址:VSPD
提取码:a2cp
破解说明:运行vspd.exe 安装,安装后先不运行,将 vspdctl.dll 文件放入工程目录中,覆盖原文件,即完成破解。
使用说明:点击Add Pair按钮添加虚拟COM口连接对,即可。
四、扩展知识
1、位运算
符号 | 意义 | 逻辑介绍 | 示例 |
---|---|---|---|
~ | 逻辑非 | 取反 | ~a |
& | 逻辑与 | 清0 | a&b |
| | 逻辑或 | 置1 | a|b |
<< | 按位左移,超出舍掉 | 乘以2的n次方 | a<<n |
>> | 按位右移,超出舍掉 | 除以2的n次方 | a>>n |
^ | 异或 | 不同置1,相同清0 | a^b |
三次异或,可使变量值互换,示例如下:
int a = 13;
int b = 20;
a ^= b;
b ^= a;
a ^= b;
Console.WriteLine($"a:{a}b:{b}");