C#串口通信,清除缓存区数据,发送区接收区

C#--串口通信(SerialPort) 一、SerialPort属性 1、需要引入的头文件 using System.IO; using System.IO.Ports; 2、属性 2.1、控件如下: 2.2、属性如下: BaudRate:波特率 DataBits:数据位 Parity:奇偶校验位 PortName:端口号 StopBits:停止位 ByteToRead:获取输入缓冲区的 IsOpen:获取是否开启串口 3、事件 ... 阅读详情
AI摘要

本文介绍了C#中的串口通信,包括串口通信的基本概念、.NET Framework中的SerialPort类的使用以及如何配置串口参数。重点讲述了如何清除串口通信的数据缓冲区,以避免长时间运行导致的效率下降问题,确保数据的准确传输。示例代码展示了如何打开、关闭串口以及发送和接收数据。

前言:C#串口通信

今天这篇文章带大家学习下C#中的串口通讯。在日常的开发工作中,如果工作内容是CS方向的同学应该很容易接触到串口通讯方面的业务需求。那么也就很容易想到C#中SerialPort类,它就是专门来处理串口通讯相关的。

1、什么是串口通信

串口通讯是指外设和计算机间通过数据信号线,地线,控制线等,按位进行传输数据的一种通讯方式。

这种通讯方式使用的数据线少,在远距离通信中可以节约成本,但其传输速度比并行通讯慢。

串口是计算机上一种非常通用的设备通讯协议。大多数计算机包含两个基于RS-232的串口。

串口也是仪器仪表设备通用的通讯协议,很多GPIB兼容的设备也带有RS-232口,同时串口通信协议也可以用于获取远程设备采集的数据。

串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时也可将接受的串行数据流转换为并行的数据字符供给CPU的器件。

一般完成这种功能的电路,我们称为串行接口电路。

串行按位(bit)发送和接收字节,尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。
串口通信示意图这里提一句,我们笔记本的USB口,它不是串口,它是所谓的U口,我们的串口如果需要插入到USB口,那么就需要一个RS-232转U口的转换器才可以。

这里需要注意下,一般我们的硬件工程师都会在自己的硬件设备都内置这个小转换设备,很方便。

2、C#中封装的serialPort

从.NET Framework 2.0开始,微软就默认提供了System.IO.Ports.SerialPort类,根据SerialPort类提供的简单操作步骤,可以很容易的完成串口的信息收发程序,从特定的串口中接收到数据也可以进行数据的发送。

关于SerialPort类的应用也很容易,可以根据微软官方的介绍进行使用。

配置SerialPort的名称,端口号,波特率等。
打开/关闭串口
接收/发送数据

SerialPort mySerialPort = new SerialPort("COM2");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity=Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.Non;

mySerialPort.DataReceived += new SerialDataReceivedEvenHandler(DataReceive_Method);

mySerialPort.Open();

mySerialPort.Close();

发送数据

using System.IO.Ports;
private static void SendSampleData()
{
    SerialPort port = new SerialPort(
        "COM1", 9600, Parity.None, 8, StopBits.One);
    port.Open();
    port.Write("Hello World");
    port.Write(new byte[] { 0x0A, 0xE2, 0xFF }, 0, 3);
    port.Close();
}

namespace SerialPortExample
{
    class SerialPortProgram
    {        
        private SerialPort port = new SerialPort("COM1",
          9600, Parity.None, 8, StopBits.One);

        [STAThread]
        static void Main(string[] args)
        {            
            new SerialPortProgram();
        }

        private SerialPortProgram()
        {
            Console.WriteLine("Incoming Data:");            
            port.DataReceived += new
              SerialDataReceivedEventHandler(port_DataReceived);            
            port.Open();         
            Application.Run();
        }

        private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {            
            Console.WriteLine(port.ReadExisting());
        }
    }

日常串口的使用多数情况是和线程进行的,一般都是在子线程中做这些耗时和重复的工作,在主线程或者界面只进行数据的展示处理即可。

在子线程的处理过程中需要特别处理串口的打开和关闭,要及时关闭串口的状态,防止出现无法捕获的异常错误。

3、C#串口通信数据缓冲区的清除

在实际的应用过程中需要上位机向下位机循环发送某些指令,经过长时间循环之后,会导致缓冲区填满,触发自动清除功能,但会随着时间的推移使得指令的发送越来越慢,因此最后在一次循环指令发送完之后且下位机完成响应之后对发送区进行清空,待接收区拿到相应的数据之后,再做一次接收区的缓冲清理。

(1)调用SerialPort.DiscardInBuffer 方法可以清空串行驱动程序的接收缓冲区的数据。
此方法等效于 Visual Basic 6.0 代码:MSComm1.InBufferCount = 0
(2)调用SerialPort.DiscardOutBuffer 方法可以清空串行驱动程序的发送缓冲区的数据。
此方法等效于 Visual Basic 6.0 代码:MSComm1.OutBufferCount = 0

C#中的串口通信SerialPort 前言 大家好,我是阿辉。 今天这篇文章带大家学习下C#中的串口通讯。在日常的开发工作中,如果工作内容是CS方向的同学应该很容易接触到串口通讯方面的业务需求。那么也就很容易想到C#中SerialPort类,它就是专门来处理串口通讯相关的。 了解什么是串口通讯 串口通讯是指外设和计算机间通过数据信号线,地线,控制线等,按位进行传输数据的一种通讯方式。 这种通讯方式使用的数据线少,在远距离通信中可以节约成本,但其传输速度比并行通讯慢。 串口是计算机上一种非常通用的设备通讯协议。大多数计算机包含两个基于RS-232 阅读详情

相关推荐

C#-串口通信(入门级教程,带配套工具)

CMO口(Communication Module Outlet)是一种用于连接计算机和外部设备的接口,也称为串行端口,简称CMO口,常见串口通讯有一般电脑应用的RS-232(使用 25 针或 9 针连接器)和工业电脑应用的半双工RS-485与全双工RS-422。电脑端口查看:设置->系统->关于->设备管理器->端口。

rwo_bear的博客 1万+

C# 中的 SerialPort

C# 中的SerialPort类提供了对串行端口(如 COM 端口)进行通信的功能。通过SerialPort类,你可以打开、关闭端口,读取和写入数据以及设置通信参数等。

weixin_54498280的博客 4855

C# SerialPort 类中清空缓存区的方法

C# SerialPort 类中清空缓存区的方法

鲤籽鲲的博客 1496

C# SerialPort配置和属性了解

前言 SerilPort是串口进行数据通信的一个控件,今天博主教大家如何进行配置SerialPort对端进行通信。 虽然有点简单,大家有兴趣可以耐心看完,我会教大家用VS2019的快捷方法和使用代码的方法进行配置,大家不喜勿喷哈哈哈,创作不易。 每日一遍,防止早恋 1 使用Vs2019 快捷方法进行对SerialPort进行配置 1.1 新建窗体应用文件,创建Serialport控件 注意:如果你发现自己的工具箱里面没有Serialport这个控件,可能是你建错了窗体应用,这个窗体应用是(.NET fr

qq_46104786的博客 1万+

C#实现串口通信解析

串口通信(Serial Communications)是指外设和计算机间通过数据信号线、地线等按位(bit)进行传输数据的一种通信方式,属于串行通信方式,能够实现远距离通信,长度可达1200米。

kalvin_y_liu的博客 1万+

零外围电路!用CH340X实现ESP32一键下载的完整教程

本文详细介绍了如何利用CH340X系列USB转串口芯片实现ESP32的一键自动下载功能,无需任何外围逻辑控制电路。通过解析CH340X的增强型DTR/RTS功能,提供核心电路设计、电压匹配方案,并指导在Arduino IDE和PlatformIO中进行软件配置,帮助开发者构建简洁、可靠且低成本的ESP32下载方案。

gpu4optimizer的博客 770

C# 解决串口接收数据不完整

使 用缓存机制完成。首先通过定义一个成员变量List<byte>buffer=newList<byte> (4096);用来存放所有的数据,在接收函数里,通过buffer.AddRange()方法不断地将接收到的数据加入到buffer中,并同时对 buffer中...

chezhaguo3158的博客 294

在F1C100s上跑GBA游戏:手把手教你用Buildroot配置SDL和移植gpsp模拟器

本文详细介绍了在全志F1C100s开发板上配置Buildroot、移植SDL库和gpsp模拟器的完整流程,帮助开发者实现在ARM9平台上流畅运行GBA游戏。内容涵盖环境配置、交叉编译、常见问题解决及性能优化技巧,特别针对'段错误'和'无声音'等典型问题提供实用解决方案。

weixin_42566424的博客 397

c#串口缓存字节数_C#串口数据丢失

我已经编写了一个C#程序来在COM2端口上接收数据。 波特率设置为115200。发送方以115200bps发送数据。 我的程序偶尔丢失了几个字节。 我正在调用ReadByte方法以从com端口读取while(true)循环中的数据。我有几个问题:当波特率设置得很高时,我是否应该丢失数据? 如果是,为什么?我将读取缓冲区的大小设置为100 * 1024 * 1024。 这会将串行驱动程序缓冲区大小设...

weixin_42581003的博客 1381

Halcon和C#联合编程实现硬币识别(个人入门练习)

本人为机器视觉入门小白,自己突发奇想 1.图片数据来源和分析 2.HALCON实现 3.C#搭建界面框架 4.C#中嵌入HALCON代码,即联合编程 5.导出.exe文件,运行以及Debug 目标是这样的,在图片中识别出每种类型的硬币数量,然后计算出总钱数。先上结果,再细说过程。 C#界面和识别结果: 1.图片数据来源和分析 图片大小及格式均统一,拍摄的时候已经尽可能的去除了背景噪点,所以图像处理的要求并不很高(重点在于思路)。硬币区分原理本人代码采用直径范围来判断(也可以半径或区域面积,HALCON算子

Demobird的博客 3614

用ESP32-S3打造迷你录音笔:SPIFFS存储+INMP441麦克风全流程解析

本文详细解析了如何使用ESP32-S3微控制器与INMP441数字麦克风构建迷你录音笔。内容涵盖硬件选型、I2S驱动配置、SPIFFS文件系统存储管理以及WAV格式封装等全流程,重点探讨了在资源受限的嵌入式设备上实现高质量语音采集与存储的优化方案和实战技巧。

qq_27496129的博客 1365

c# Modbus串口通信实现(功能码0x03)记录

最近在学习Modbus的通信 这个代码实现的是关于Modbus-RTU协议(功能码0x03)的内容,代码是目前学习教程的,我跟着敲下来的,但作为新手理解起来有点抽象,所以记录下目前我对于这段代码理解。

m0_72238284的博客 970

SEGGER Embedded Studio初体验

先楫HPM5E00EVK开发环境搭建

hywing's blog 1108

基于C#实现与新大陆扫码枪通信

   随着工业互联的发展,扫码枪在很多场合都有所应用,超市、商场以及一些智能工厂。今天主要讲如何通过C#实现与新大陆扫码枪(OY10)进行通信,对于扫码枪的配置,这里就不多说了,结合说明书就可以实现。这里值得注意的是,如果安装驱动后,电脑设备管理器中看不到COM口,可能需要扫一个条形码来设置一下,具体参考说明书通讯配置章节。    首先贴下界面,基于Winform开发,主要就是正常的串口通信,涉...

weixin_34090643的博客 3217

DB文件在编程中的作用及示例代码

通过使用DB文件,我们可以实现数据的持久化存储,并能够高效地进行数据的增删改查操作。在本文中,我们以SQLite数据库为例,演示了如何使用Python语言创建和操作DB文件的示例代码。在实际的编程中,我们可以根据具体的需求和使用的数据库系统来进行更复杂的操作和优化。通过使用DB文件,我们可以实现数据的持久化存储,确保数据在程序关闭后也能被保留,并且能够高效地进行数据检索和更新。在本文中,我们将探讨DB文件的作用,并提供一些示例代码展示如何在编程中使用DB文件。上述代码中,我们使用SQLite提供的。

CodeSpark的博客 1821

addr2line解析不出来行号的解决方式(汇编解析高阶版)

摘要:本文针对AEC crash问题中addr2line无法解析行号的情况,通过llvm-addr2line和反汇编分析,定位到CamX::AECBEStats17::AdjustROIParams函数中的乘法溢出问题。关键发现包括: 常规addr2line只能解析到函数名但无具体行号 llvm-addr2line解析出多个可能溢出点(行196/204/211/218/270/271) 反汇编显示6个条件分支跳转到溢出处理函数 源码分析确认这些位置均存在乘法运算 最终通过汇编级调试工具成功定位UBsan报告

168

WinForm 串口通信 拆分知识点总结(基础+进阶粘包处理)

/ 全局字节缓存区// 帧结束标志 \r\n逐字节遍历缓存,匹配结束符数组,返回帧起始索引// 长度不足直接返回// 逐字节匹配i++)j++)break;return -1;串口接收事件是子线程,严禁直接操作控件// 更新文本框、富文本框}));

2401_84677775的博客 221

【C#程序员入门AI】必知的一些知识

2026年C#调用AI,核心就4个概念+3种方式4个概念:大模型(大脑)、嵌入(数字密码)、向量(载体)、Agent(超级助理)3种方式:云端API(快)、本地模型(隐私)、混合部署(最佳)不用怕复杂,跟着这个思路走,你就能从“AI小白”变成“C# AI开发能手”,把AI集成到你的.NET项目里,提升效率、创造价值!

人工智能AI技术 407

在c#开发的上位机中快速集成串口通讯能力(可免费商用)

本文介绍了SerialPortHelper串口通信工具类,这是一个专为自定义串口协议设计的辅助类,适用于需要识别完整帧的工业通信场景。核心功能包括完整帧判断机制、自适应延迟触发、线程安全读写控制等。项目采用MPL-2.0开源协议,允许商业使用但要求修改后的源码开源。文档提供了典型用法示例、方法说明及注意事项,强调使用后需及时释放资源。该工具类支持"请求-响应"式协议封装,适合与嵌入式系统、仪器设备等通信。

weixin_45339469的博客 392

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

unity3d中串口的使用

工作中遇到了串口的问题,通过查资料&实验写出了下面代码; 关于串口的代码我在网上看了好多,一种是用事件来做,另外一种使用线程来做;(经过试验,unity无法用串口自带的事件进行数据读取); 看完以后,个人感觉比较麻烦,所以就用了下面的方式; PS:也可以改成用IEnumerator 或者Invoke来写 1 using UnityEngine; 2 using Sys...

weixin_30786617的博客 410

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

labview排错

源代码正常跑,应用程序报这个错,是因为源代码的可以找到项目路径内所有dll的路径,而应用程序只能找到data文件夹的dll文件。解决查看源代码中.net的程序集的路径,复制对应的dll到data文件夹下。

备忘 4504

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

STM32入门教程(OLED屏篇)

STM32 OLED显示屏应用指南 摘要 本文基于江协科技STM32视频教程,详细介绍了OLED显示屏在STM32开发中的应用方法。文章首先讲解了OLED的基本原理和调试方式,包括串口调试、显示屏调试和Keil调试模式。然后详细阐述了0.96寸和1.3寸OLED屏的参数特性及引脚分布。 主要内容包括: 基础应用:通过示例程序演示了OLED初始化、清屏、显示字符、字符串和各种数字格式的方法。 进阶应用:介绍了OLED坐标系系统,提供了UTF-8和GB2312两种编码格式下的显示方案,包括汉字和特殊字符的显示技

Zevalin的博客 2465

c#之串口通信

文章目录前言背景一、添加串口组件二、搭建界面三、可能会用到的代码1.Form12.窗体初始化3.调试追踪4.字符串转化为十六进制字节数据5.发送框文本改变事件四、编写扫描端口函数1.编写按键点击事件2.编写扫描函数五、编写打开串口函数六、编写发送函数七、编写接收函数1.先注册一下事件2.编写数据接收函数八、测试1.打开串口2.接收数据1.十六进制2.字符串3.发送数据1.十六进制2.字符串注意END=============================分割线 前言 之前因为和学长一起参加一个活动,所以自

lengyuefeng212的博客 2万+

c#使用串口进行通信

要做到的效果是,A串口给B串口发送消息,B串口接收消息;B串口给A串口发送消息,A串口接收消息,形成实时通信的功能。 1.安装Configure Virtual Serial Port Driver软件,这个软件可以虚拟出串口。界面是 2.点击增加串口按钮,这个相当于创建了COM1和COM2串口,2个串口自动进行了关联 3. 创建一个项目,界面如下 4.界面代码 namespace 串口通信 { partial class Form1 { /// ..

故里2130 9698

C#开发串口通信实例及串口基础

串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。

Silent_you的博客 1万+
上一篇: C++中的继承
下一篇: 图像稀疏域变换及重建MATLAB仿真
WinrenJoe
博客等级 码龄8年 67粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值