C# 串口通信

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

        蓝牙:连接以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);                //从缓冲区获取读取指定字节数据
                }
        }

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

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

原文链接:https://www.cnblogs.com/Zjl-NanKe/p/17374976.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 串口通信 - Python技术站

(0)
上一篇 2023年5月9日
下一篇 2023年5月9日

相关文章

  • Javascript 浮点运算精度问题分析与解决

    下面就让我来详细讲解“Javascript 浮点运算精度问题分析与解决”的完整攻略。 1. 浮点数的精度问题 在 JavaScript 中,浮点数值类型(float 和 double)的标准是 IEEE-754,它受到二进制浮点数精度的限制。这就意味着浮点数在不仔细处理的情况下可能产生一些奇怪的计算结果,尤其是涉及除法、小数、加、减和乘。 举个例子,假设我们…

    C# 2023年6月8日
    00
  • 解析C#中断言与异常的应用方式及异常处理的流程控制

    解析C#中断言与异常的应用方式及异常处理的流程控制 断言的应用方式 在C#中,我们可以使用断言(Assert)来检测程序中的错误和异常。断言是一种用于检查代码逻辑的机制,通过在代码中加入断言,我们可以确保程序在运行时不会出现意料之外的行为,从而提高代码的质量和可靠性。 断言的基本使用方式如下: Debug.Assert(condition, message)…

    C# 2023年5月14日
    00
  • 浅谈二叉查找树的集合总结分析

    二叉查找树(Binary Search Tree,BST)是一种常见的数据结构,它是一种有序的树形结构,其中每个节点最多有两个子节点。在二叉查找树中,左子树的所有节点的值都小于根节点的值,右子树的所有节点的值都大于根节点的值。这种有序性质使得二叉查找树非常适合用于实现集合(Set)数据结构。 以下是两个示例,介绍如何使用二叉查找树实现集合: 示例一:使用二叉…

    C# 2023年5月15日
    00
  • C#中倒序输出字符串的方法示例

    下面是关于C#中倒序输出字符串的方法示例的完整攻略: 1. 使用Array.Reverse方法 下面是一个使用Array.Reverse方法的示例代码: string input = "Hello World"; char[] inputArray = input.ToCharArray(); Array.Reverse(inputArr…

    C# 2023年6月7日
    00
  • 详解LINQ入门(下篇)

    下面我将详细讲解“详解LINQ入门(下篇)”的完整攻略。 一、LINQ基础 1.1 LINQ介绍 LINQ的全称是Language INtegrated Query,即语言集成查询,是微软在.NET Framework 3.5中引入的一项技术。它可以允许我们使用类SQL语句来操作各种数据源,包括XML文档、ADO.NET中的关系型数据库、Linq to SQ…

    C# 2023年6月1日
    00
  • C#开发Windows服务实例之实现禁止QQ运行

    C#开发Windows服务实例之实现禁止QQ运行 1. 概述 在Windows操作系统下,我们可以通过禁止某些进程的运行来增强系统的安全性。比如,我们可以通过开发一个Windows服务程序,实现禁止QQ程序的运行。 2. 开发步骤 2.1 创建Windows服务 首先,我们需要在Visual Studio中创建一个Windows服务项目,具体步骤如下: 打开…

    C# 2023年5月15日
    00
  • C# WinForm捕获全局变量异常 SamWang解决方法

    下面是详细讲解“C# WinForm捕获全局变量异常SamWang解决方法”的完整攻略。 背景 在C# WinForm程序的开发过程中,如果出现了全局变量异常,这会导致程序崩溃或者无法正常运行。为了避免这种情况的发生,我们需要在程序中加入一些对全局变量异常的处理方法。 解决方法 一般来说,我们可以使用try-catch语句来捕获全局变量异常。但是,如果全局变…

    C# 2023年5月14日
    00
  • 详解C#中一维数组的插入

    下面我将针对“详解C#中一维数组的插入”进行完整的介绍。 插入一维数组 在C#中插入一维数组,我们可以使用数组的 Array.Copy() 和 Array.Resize() 方法。下面分别介绍这两个方法的用法: 1.使用Array.Copy()方法 int[] arr = { 1, 2, 3, 4, 5 }; //初始数组 int[] arrNew = ne…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部