C#中的串口通信SerialPort

5111e41f3da083246b7abfe3ab07e54e.png

前言

大家好,我是阿辉。

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

了解什么是串口通讯

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

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

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

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

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

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

串行按位(bit)发送和接收字节,尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。

9e2df88459d0135139559cd06bac35df.png

这里提一句,我们笔记本的USB口,它不是串口,它是所谓的U口,我们的串口如果需要插入到USB口,那么就需要一个RS-232转U口的转换器才可以。

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

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 += newSerialDataReceivedEventHandler(port_DataReceived);            port.Open();         Application.Run();}private void port_DataReceived(object sender, SerialDataReceivedEventArgs e){            Console.WriteLine(port.ReadExisting());}}

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

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

寄语

人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。

原创不易,给个关注。

我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发  谢谢。

55754c18b7c59dee5b37792404c9c571.png

往期推荐

C#中的委托(Update)

fb79f85cec6daac590fdb00197ba96fa.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日本的酒店主题能有多丰富?

1 伤害性不大,侮辱性极强(素材来源网络,侵删)▼2 好家伙,这字医生都看不懂!(via.你的野王,侵删)▼3 当家里点了电子蜡烛(素材来源网络,侵删&…

python编写请求参数带文件_转载:如何编写一个带命令行参数的Python文件

看到别人执行一个支持命令行参数的python文件,瞬间觉得高大上起来、牛逼起来,那么如何编写一个带命令行参数的python脚本呢?不用紧张,下面将简单易懂地让你学会如何让自己的python脚本,支持命令行参数。首先你要知道py…

6款程序员不得不爱的bootstrap模板

Bootstrap是基于jQuery框架开发的,它在jQuery框架的基础上进行了更为个性化和人性化的完善,形成一套自己独有的网站风格,并兼容大 部分jQuery插件。Bootstrap中包含了丰富的Web组件,根据这些组件,可以快速的搭建一个漂…

C# 使用XML序列化对象(一)

在System.Xml.Serialization命名空间中提供了XML序列化类XmlSerializer用于将对象序列化为XML。 下面看一个最简单的例子&#xff1a; public class A{public int a{get;set;}}public string XmlSerialize<T>(T obj){XmlSerializer xs new XmlSerializer(typeof(T));usi…

数据结构之深度优先搜索(用栈实现)问题

深度优先搜索 可以这样理解,向四边延伸搜索,然后遇到不能搜索的时候就回退,也就是回溯思想,然后再去其它可能地方搜索。 题目: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0,…

20161114记录一件工作的事

记录 今天&#xff0c;心痛了一次。 做了半年多的项目&#xff0c;被砍了。我去&#xff0c;心血又一次白白付出了。听到这样的消息&#xff0c;心情总会不好。 所以&#xff0c;我今天心情不好&#xff0c;不要理我哦&#xff0c;千万不要理我&#xff0c;我会发飙的 转载于:h…

Natasha 4.0 探索之路系列(四) 模板 API

相关文章Natasha 4.0 探索之路系列(一) 概况Natasha 4.0 探索之路系列(二) 「域」与插件Natasha 模板Natasha 在编译单元的基础上进行了封装整理, 并提供了多种模板帮助开发者构建功能.使用此篇的 API 前提是您对 C# 非常熟悉, 对系统的一些类型足够了解.据此 Natasha 将拒绝与…

青年博士离职高校被索赔10.5万违约金,后博士上诉至法院,判决来了!

全世界只有3.14 % 的人关注了爆炸吧知识本文转自募格学术我们都知道&#xff0c;现在入职高校往往都要签订一定的服务年限合同&#xff0c;如果合同期未满想要离职的话&#xff0c;需要给高校支付巨额违约金。但根据《劳动法》&#xff0c;有些巨额违约金从法律层面来说是站不住…

python os.walk模块_Python之os.walk和os.path.walk

一、os.walk()函数声明&#xff1a;os.walk(top,topdownTrue,οnerrοrNone)(1)参数top表示需要遍历的顶级目录的路径。(2)参数topdown的默认值是“True”表示首先返回顶级目录下的文件&#xff0c;然后再遍历子目录中的文件。当topdown的值为"False"时&#xff0c;表…

Windows Service下的Timer计时器的使用

在C#中提供了三种类型的计时器&#xff1a;1、基于 Windows 的标准计时器(System.Windows.Forms.Timer)2、基于服务器的计时器(System.Timers.Timer)3、线程计时器(System.Threading.Timer) 一、基于 Windows 的标准计时器(System.Windows.Forms.Timer) 首先注意一点就是&#…

linux c 之使用-O来优化gcc

比如一般文件编译 gcc bfs.c -o bfs然后查看花了多少时间 time ./bfs 然后看结果 使用-O 优化&#xff0c;输入下面命令 gcc -O bfs.c -o bfs 再看所需时间&#xff0c;输入下面命令 time ./bfs 结果如图 我们还可以进一步优化用 -O1 -O2 -O3&#xff0c;列如 gcc -O2 bfs.c -…

Hbase Java API详解

2019独角兽企业重金招聘Python工程师标准>>> HBase是Hadoop的数据库&#xff0c;能够对大数据提供随机、实时读写访问。他是开源的&#xff0c;分布式的&#xff0c;多版本的&#xff0c;面向列的&#xff0c;存储模型。 在讲解的时候我首先给大家讲解一下HBase的整…

对C#未来的一点感悟

01—C#有前途吗&#xff1f;在国内C#比较冷门&#xff08;相对Python、Java&#xff09;&#xff0c;很多初学者可能都会对C#的未来有忧虑&#xff0c;害怕没有前途&#xff0c;担心找不到好的工作。其实&#xff0c;大可必须这样&#xff0c;就我在上海而言&#xff0c;我之前…

python 框架 优化_python+unittest框架第六天unittest之优化测试报告

今天的内容主要是&#xff0c;用第三方的HTMLRUNner 第三方的报告来优化之前第五天批量执行案例的测试报告。案例的部分看第五天的批量执行笔记~HTMLRUNner他可以生成更美观的测试报告&#xff0c;基于前辈造的车子&#xff0c;我们直接改造使用。先看下运行代码部分&#xff1…

linux c的连接库和怎么同时编译多个源程序

1、理解库函数 库函数有头文件和库文件(so 或者 a)的集合 1)头文件的默认目录 /usr/include 2)库文件的默认目录 /user/lib 3)linux的库文件分为动态连接库(.so)和静态连接库(.a) 他们之间的差距在于程序执行时所需代码是运行时加载的,海山编译是静态加载的,默认情况下…

2023年12月青少年机器人技术等级考试(四级) 实操试卷

主题&#xff1a;TT马达转速感应装置 器件&#xff1a;Atmega328P主控板1块&#xff0c;TT马达1个&#xff0c;直流电机驱动芯片或模块1个&#xff0c;超声波传感器1个&#xff0c;LED灯2个&#xff08;分别为LED_A和LED_B&#xff09;及相应辅件。以上模块也可使用分立器件结合…

在C#中的各种应用

1.怎么解决在C中的#define的预编译 比如在C#想将DataType全都替换成Int using DataTypeSystem.Int32;将上面一句放在开头就行了 2.在字符串中声明一个字符串数组 int count5; string[] stringArraynew string[count];这样就行了转载于:https://www.cnblogs.com/chenbuer/p…

微软第二财季营收达 517 亿美元,净利润同比增长 21%

微软今日发布了 2022 财年第二财季财报&#xff0c;营收为 517.28 亿美元&#xff0c;与去年同期的 430.76 亿美元相比增长 20%。净利润为 187.65 亿美元&#xff0c;与去年同期的 154.63 亿美元相比增长 21%。生产力和业务流程部门的营收为 159.36 亿美元&#xff0c;与去年同…