C# 串口通信

  • C# 串口通信已关闭评论
  • 246 次浏览
  • A+
所属分类:.NET技术
摘要

这里浅说一下蓝牙与串口的区别:        蓝牙:连接以mac地址为主,显示名称可以更改,低功耗蓝牙还需要配置服务与特征(服务有读,写,可读可写区别)

这里浅说一下蓝牙与串口的区别:

        蓝牙:连接以mac地址为主,显示名称可以更改,低功耗蓝牙还需要配置服务与特征(服务有读,写,可读可写区别)

特点:不同设备连接同一台蓝牙设备,mac地址与显示名称都是唯一的

        串口:连接以端口名称为主,例如com1,com2,连接时需要配置参数较多

特点:不同设备接入同一个串口模块,显示的名称可能不一样

串口:SerialPort      继承于System.IO.Ports

        不同串口模块所需要的驱动不同,使用之前都需要安装对应模块驱动,因为电脑安装的驱动数量不同,就会造成同一个串口驱动在不同电脑中占得位置不同。

        举个例子:电脑相当于菜市场,串口相当于摊位,默认是没有摊位的,插入串口之后会声明一个摊位(端口com),摊位区分是以数字标识区分的例如com1,com2,com3(这是比较烦人的),插入串口之后,想要确定这个串口模块声明的摊位(端口)名称就需要在设备管理器中查看

C# 串口通信

  这里的silicon labs cp210x就是我插入的串口模块,他声明了端口名称为com4,连接时就需要选择com4,配置对应参数(串口模块的参数发布之后都是固定的,对于用户操作可以后台做成配置文件写死)。

C# 串口通信

 

  连接一个串口需要配置以下参数:

            _serialPortObject.PortName =串口名称
            _serialPortObject.BaudRate = 波特率
            _serialPortObject.DataBits = 数据位
            _serialPortObject.Parity = 校验位
            _serialPortObject.StopBits = 停止位

        以上任意一个串口参数配置与硬件串口模块参数不匹配,都会造成连接参数错误, 还有一些可配置项如输入与输出缓冲区大小,超时配置等等

 

 串口接收数据是订阅DataReceived方法,属于观察者模式

  _serialPortObject.DataReceived += PushMessage;

  private void PushMessage(object sender, SerialDataReceivedEventArgs e)
        {
                lock (_objLock)
                {
                    if (_serialPortObject.IsOpen == false) return;
                    int length = _serialPortObject.BytesToRead; 获取接收缓冲区的字节数
                    byte[] buffer = new byte[length];  //接收数据则字节数组
                    if (length <= 0) return;
                    _serialPortObject.Read(buffer, 0, length);                //从缓冲区获取读取指定字节数据
                }
        }

关于串口遇到的问题记录:

        串口因为是外接模块所以需要安装对应驱动,最好从串口官网下载指定兼容驱动,不然容易造成蓝屏死机等等问题