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 当家里点了电子蜡烛(素材来源网络,侵删&…

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

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

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

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

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

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

linux c 之使用-O来优化gcc

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

Hbase Java API详解

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

对C#未来的一点感悟

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

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

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

二值图像--形态学处理3 开操作和闭操作

学习DIP第13天 转载请标明出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意。。。。。。。。 开篇废话 简单来说所…

Linux查看硬件信息很Easy

往往一到公司盘点或升级服务器硬件时候,需要记录服务器的具体硬件信息,对于Windows下来说,装个鲁大师既可以查看所有硬件信息,但Linux下要想查看这些硬件信息要麻烦的多,下面是我整理的一些命令,再查看Linu…

常见正则表达式

2019独角兽企业重金招聘Python工程师标准>>> ip地址 /^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(…

WPF 实现动态Windows桌面壁纸~

由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 PS:有更好的方式欢迎推荐。此项目灵感来源于 丑萌气质狗 B站同名 QQ群:560611514 (学习Unity3D)增加了播放视频。01—代码如下一…

linux c用open打开(创建)一个文件

1、文件描述符 Linux操作系统内核(kernel)利用文件描述符来访问文件,文件描述符大于等于0,是一个用户描述被打开文件的索引值,它指向该文件的相关信息记录表,当文件打开或者创建新文件的时,就会返回一个文件描述符,当读写文件时,也需要使用文件描述符来指定特写文件。…

Natasha 4.0 探索之路系列(三) 基本的动态编译

相关文章Natasha 4.0 探索之路系列(一) 概况Natasha 4.0 探索之路系列(二) 「域」与插件Natasha 的设计动态编译Roslyn 为开发者提供了动态编译的接口,允许我们以 C# 代码来编写 Emit 或 表达式树生成的程序集,但是完成一个编译需要诸多步骤,…

〖Windows〗Linux的Qt程序源码转换至Windows平台运行,编码的解决

在中国大陆,Windows默认的编码是gb2312,而Linux是UTF8; 多数情况下,把Linux上的程序转换至Windows上运行需要进行编码转换才能正常显示; 而其实大可以不必的,同样,文件使用的依然是UTF-8&#x…