目录
项目任务
功能要求:
1.通过下拉列表框切换串口端口号
2.通过按钮开关打开和关闭串口
3.可以设置波特率
4.支持中文信息收发,且具有保存信息功能
任务准备
一、串口通信简介
波特率是一个衡量符号传输速率的参数。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送 960 个字符,而每个字符格式包含 10 位(1个起始位,1个停止位,8个数据位),这时的波特率为 960Bd ,比特率为 10 × 960 = 9600 (bps)。
在串口通信中,数据帧是通信中最基本的数据单元,通常由起始位、数据位、校验位和停止位组成。
数据位: 数据位是衡量通信中实际数据位的参数,用于传输实际的数据内容,通常为 5、6、7 或 8 个二进制位(bit 位)。其中,由于 ASCII 码位宽为 8bit ,一般情况下使用 8 位数据位,能够表示 0255 之间的所有数字、字母等字符,并且数据按照 LSB (低比特先传)的方式发送。
校验位:用于检验数据是否有误,通常有奇偶校验和 CRC 校验两种方式。奇偶校验就是在数据位的结尾添加一个奇偶校验位(1 or 0)使得整个帧的 1 数 (或 0 数) 的数量为奇数或偶数, CRC 校验则是在数据后面添加一段检验码校验数据的正确性。另外,校验位根据可配置分为五种模式,如下图1所示。
图1
停止位:一个或者多个逻辑 1,表示一次数据传输的结束。
总结:一个完整的数据帧通常由起始位、数据位、校验位和停止位四部分构成,具体的数据帧格式可以根据具体的通信标准、协议及数据通信类型来决定,通常是在信息传输的过程中确定格式并发出的。
二、C# 串口( SerialPort )类
1. 串口(SerialPort)类概述
C# 提供了 SerialPort 类用于实现串口控制,此类位于 System.IO.Ports 命名空间下,用于控制串行端口文件资源。SerialPort 类提供同步 I/O 和事件驱动的 I/O 、对管脚和中断状态的访问以及对串行驱动程序的访问。其中详细成员介绍参看 MSDN 文档。
2. 串口(SerialPort)组件的常用属性
串口(SerialPort)组件的常用属性如图2所示。
图2
3. 串口(SerialPort)组件的常用方法
串口(SerialPort)组件的常用方法如图3所示。
图3
4. 串口(SerialPort)组件的常用事件
DataReceived指示已通过由 SerialPort 对象表示的端口接收了数据
ErrorReceived指示由 SerialPort 对象表示的端口上发生了错误
三、C# 串口( SerialPort )类的构造函数
串口(SerialPort)类的构造函数,其功能是初始化 SerialPort 类的新实例,详情见图4所示。
图4
四、C# 串口(SerialPort)类应用举例
1. 串口相关参数配置
在 SerialPort 类应用中,需要对串口相关参数进行配置,例如 SerialPort 的名称,端口号,波特率等,其代码(片段)如代码所示。
以指定端口 COM3 实例化 mySerialPort 对象, 设置波特率为:9600, 设置奇偶检验位为:无
, 设置停止位为:1位,设置数据位为:8位,设置串口数据传输握手协议:无。
// 构造参数实例化对象,指定串口名
// 以指定端口 COM3 实例化 mySerialPort 对象
SerialPort mySerialPort = new SerialPort("COM3");
mySerialPort.BaudRate = 9600;// 设置波特率为:9600
mySerialPort.Parity=Parity.None;// 设置奇偶检验位为:无
mySerialPort.StopBits = StopBits.One;// 设置停止位为:1位
mySerialPort.DataBits = 8;// 设置数据位为:8位
mySerialPort.Open(); // 打开串口
// DataReceived是串口类的一个事件,通过+=运算符订阅事件,如果串口接收到数据就触发事件,调用DataReceive Method事件处理方法
mySerialPort.DataReceived +&