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日

相关文章

  • C#通过反射创建自定义泛型

    要通过反射在C#中创建自定义泛型,需要遵循以下步骤: 使用Type.MakeGenericType方法创建泛型类型的实例对象,并传递一个类型数组,该数组包含泛型类型所需的类型参数。 使用Activator.CreateInstance方法创建泛型类型对象的实例。 必要时使用反射获取泛型类型对象上的属性和方法,以使其在程序中正确运行。 以下是两个示例说明: 示…

    C# 2023年5月31日
    00
  • Win10电子书无法打开怎么办?win10无法打开电子书文档的解决方法

    好的!下面给出完整攻略: Win10电子书无法打开怎么办? 1.检查文件格式是否支持 首先需要检查电子书文件格式是否被Windows 10系统支持,常见的电子书格式如 EPUB、MOBI、PDF等,在Windows系统中EPUB等格式需要第三方工具的支持,如果没有安装这些工具那么实际上是无法打开EPUB文件的。如果文件格式被支持,那么可以尝试下面的方法。 2…

    C# 2023年6月6日
    00
  • C#实现Winform版计算器

    这里是C#实现Winform版计算器的完整攻略: 1. 确定项目的需求和功能 在开始任何项目之前,首先要确定项目的需求和功能,这样可以帮助我们更好地规划和实施项目。对于一个计算器,我们至少需要实现以下功能: 基本运算:加减乘除 清除:清空当前输入和结果 回退:撤销上一步输入 小数点:支持小数计算 防止错误输入:例如除以0等情况 确定以上需求和功能后,我们可以…

    C# 2023年6月6日
    00
  • 浅谈如何在ASP.NET Core中实现一个基础的身份认证

    在ASP.NET Core中实现基础身份认证 ASP.NET Core提供了一种灵活的身份认证机制,可以轻松地实现基础的身份认证。本攻略将详细介绍如何在ASP.NET Core中实现基础身份认证。 什么是基础身份认证? 基础身份认证是一种简单的身份认证机制,它使用HTTP协议的基本认证机制来验证用户的身份。在基础身份认证中,用户需要提供用户名和密码,然后服务…

    C# 2023年5月16日
    00
  • C# 串口通信

    这里浅说一下蓝牙与串口的区别:         蓝牙:连接以mac地址为主,显示名称可以更改,低功耗蓝牙还需要配置服务与特征(服务有读,写,可读可写区别) 特点:不同设备连接同一台蓝牙设备,mac地址与显示名称都是唯一的         串口:连接以端口名称为主,例如com1,com2,连接时需要配置参数较多 特点:不同设备接入同一个串口模块,显示的名称可能…

    C# 2023年5月5日
    00
  • C#笔试题之同线程Lock语句递归不会死锁

    当同一线程中出现递归的Lock语句时,如果没有特殊的处理,就可能导致死锁。这是因为Lock语句在执行前会获取锁,并在执行完毕后释放锁,如果在获取锁之后又执行了同一个Lock语句,就会导致锁无法释放,进而导致死锁。 解决这个问题的方法是利用Monitor.Enter和Monitor.Exit方法,进行锁的操作。其中,Monitor.Enter方法获取锁,如果已…

    C# 2023年6月7日
    00
  • 使用C#实现写入系统日志

    操作系统日志是记录操作系统信息的一种重要的方式,在C#语言中,我们可以通过.NET Framework提供的EventLog类来实现写入系统日志的功能。下面是使用C#实现写入系统日志的详细攻略: 1. 创建EventLog组件 首先,我们需要为当前项目添加EventLog组件,步骤如下: 在Visual Studio的工具栏中选择“工具”-“选项”-“Win…

    C# 2023年5月15日
    00
  • .NET Core源码解析配置文件及依赖注入

    .NET Core源码解析配置文件及依赖注入 在本攻略中,我们将详细讲解.NET Core源码解析配置文件及依赖注入的技术及工作原理,并提供两个示例说明。 配置文件 .NET Core中的配置文件是一种用于存储应用程序配置信息的文件。配置文件可以包含应用程序的各种配置信息,如数据库连接字符串、日志级别、缓存设置等。在.NET Core中,配置文件通常使用JS…

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