【代码】使用c#实现串口通信的基础模板

一、分享代码 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;using System.IO.Ports;
using System.Threading;//串口参数结构体
struct COMPORT_ATTRIBUTE
{public int bandrate;public int data_bit;public Parity parity_check_bit;public StopBits stop_bit;public string comport_number;
};namespace uarttest2
{public partial class Form1 : Form{// 串口参数private COMPORT_ATTRIBUTE uart_port;//实例化串口类public System.IO.Ports.SerialPort _serialPort = new System.IO.Ports.SerialPort();//============================== 定义线程 ===========================================Thread listenThread;public bool rx_thread_stop_flag = false;//线程停止标志public bool rx_thread_start_flag = false;//线程停止标志//初始化端口public void InitializePorts(){string[] port_names = SerialPort.GetPortNames();string last_name = "";comport.Items.Clear();//清除数据if (port_names == null){MessageBox.Show("本机没有串口!", "Error");return;}foreach (string s in System.IO.Ports.SerialPort.GetPortNames()){//获取有多少个COM口就添加进COMBOX项目列表  comport.Items.Add(s);last_name = s;//保存最新的一个}comport.Text = last_name;//显示最新的一个串口uart_port.comport_number = last_name;//赋值变量}public void InitializeSerialSet(){// 初始化扫描串口InitializePorts();// 初始化波特率uart_port.bandrate = 115200;// 初始化数据位uart_port.data_bit = 8;// 初始化停止位uart_port.stop_bit = (StopBits)1;// 初始化校验位uart_port.parity_check_bit = 0;//Parity.Noneif (uart_port.parity_check_bit == (Parity)1)//  Parity.Odd{}else if (uart_port.parity_check_bit == (Parity)2) //Parity.Even{}else{}}public void Open_uart(){ if (_serialPort.IsOpen){_serialPort.Close();}_serialPort.PortName = comport.Text;            //串口名称_serialPort.BaudRate = uart_port.bandrate;      //波特率_serialPort.DataBits = uart_port.data_bit;      //数据位_serialPort.Parity = uart_port.parity_check_bit;//校验位_serialPort.StopBits = uart_port.stop_bit;      //停止位}public void Close_uart(){try {}catch (Exception ex){MessageBox.Show(ex.Message);}}/// <summary>/// 开关接收线程/// </summary>private void RxThreadOnOff(bool on_off){if (on_off){listenThread = new Thread(() => ReceiveData());//开启一个线程来不断的接收数据listenThread.IsBackground = true;listenThread.Start();}else{rx_thread_stop_flag = true;while (listenThread.IsAlive)//等待停止{ }rx_thread_stop_flag = false;}}/// <summary>/// 接收数据/// </summary>public void ReceiveData(){//接收线程while (_serialPort.IsOpen && !rx_thread_stop_flag)//线程循环{//......}}public Form1(){InitializeComponent();InitializeSerialSet();}private void scanuart_Click(object sender, EventArgs e){InitializePorts();}private void openuart_Click(object sender, EventArgs e){Open_uart();}}
}

串口通信基础及C#实现详解

串口通信(UART)是计算机与外部设备(如传感器、模块等)进行数据传输的常用方式。本文将介绍串口通信的基本原理,并通过一个C#示例讲解如何在Windows上实现串口通信。

什么是串口通信?

串口通信是指通过串行方式在两个设备之间进行数据传输的一种通信方式。与并行通信不同,串口通信的数据传输是按位进行的。串口通信最常见的应用是计算机与外设(如传感器、模块或单片机)之间的通信。

在串口通信中,常见的参数包括:

  • 波特率(Baud Rate):表示每秒传输的比特数。常用的波特率有9600、115200等。
  • 数据位(Data Bits):数据包中有效数据的位数,常见的有7位或8位。
  • 停止位(Stop Bits):用于标识一个数据包的结束,常见的有1位或2位停止位。
  • 校验位(Parity Bit):用于检测数据传输中的错误,分为无校验、偶校验和奇校验等。
  • 串口号(Port Number):表示计算机与外设通信时使用的物理串口,常见的有COM1、COM2等。
C#中的串口通信类

在C#中,System.IO.Ports.SerialPort 类封装了串口通信相关的功能。你可以通过该类轻松实现串口的打开、配置、数据发送与接收等操作。

本文就实现了通过配置这一段属性来实现打开串口的操作。界面元素展示如下:

 对应三个功能,扫描,开启,关闭串口的方法。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SAP中BW与OFFICE 64位兼容性问题解决实例

近期遇到一个BW与OFFICE的兼容性问题。新电脑(WIN11)安装使用SAP正常&#xff0c;安装OFFICE 2016 64位版时&#xff0c;BEx Aanlysis无法打开(没有提示&#xff0c;下位框不出现)。安装OFFICE 2016 32位版时&#xff0c;BW的Aanlysis可正常使用。 这个BEx Aanlysis我理解是SA…

链表--(1)链表的概念

前言引入 之前我们学习了数组这一概念,使用数组可以在编程时增加程序的灵活性。但在c语言中不允许定义动态数组的类型也不能随意调整数组的大小,往往会导致内存空间的浪费。由此我们推出链表。链表是动态进行内存分配的一种结构,它可以随时为其结点分配需要的存储空间也方便…

爬虫框架之Scrapy介绍——高效方便

# 近年来大数据分析、数据可视化和python等课程逐渐在大学各个学科中铺展开来&#xff0c;这样一来爬虫在平时小作业和期中、期末报告中出现的频率也逐渐变高。那么单一的使用requests库&#xff0c;自己从头到尾的的设计&#xff0c;考虑数据提取、线程管理和数据存储等方方面…

干货:分享6款ai论文写作助手,一键生成原创论文(步骤+工具)

写一篇论文是一个复杂的过程&#xff0c;涉及多个步骤&#xff0c;包括选题、研究、撰写、编辑和校对。AI可以在其中的一些步骤中提供帮助&#xff0c;但最终的论文还是需要人类作者的深入思考和创造性输入。以下是六款值得推荐的AI论文写作助手&#xff0c;其中特别推荐千笔-A…

前端开发之原型模式

介绍 原型模式本质就是借用一个已有的实例做原型&#xff0c;在这原型基础上快速复制出一个和原型一样的一个对象。 class CloneDemo {name clone democlone(): CloneDemo {return new CloneDemo()} } 原型原型链 函数&#xff08;class&#xff09;都有显示原型 prototyp…

Redis-01 入门和十大数据类型

Redis支持两种持久化方式&#xff1a;RDB持久化和AOF持久化。 1.RDB持久化是将Redis的数据以快照的形式保存在磁盘上&#xff0c;可以手动触发或通过配置文件设置定时触发。RDB保存的是Redis在某个时间点上的数据快照&#xff0c;可以通过恢复RDB文件来恢复数据。 2.AOF持久化…

深蓝学院-- 量产自动驾驶中的规划控制算法 小鹏

文章目录 0. 前言1.发展现状2.行车功能中难点问题及解决思路问题1&#xff1a;车道居中辅助&#xff0c;画龙&#xff0c;蛇行问题。问题2&#xff1a;外界环境扰动以及传感器信息缺失下的横向控制难点问题3&#xff1a;大坡度平稳停车 3. 泊车功能中难点问题及解决思路问题1&a…

尚品汇-秒杀下单实现-页面轮询查询订单状态(五十三)

目录&#xff1a; &#xff08;1&#xff09;整合秒杀业务 &#xff08;2&#xff09;秒杀下单 &#xff08;3&#xff09;秒杀下单监听 &#xff08;4&#xff09;页面轮询接口 &#xff08;1&#xff09;整合秒杀业务 秒杀的主要目的就是获取一个下单资格&#xff0c;拥…

【iOS】——JSONModel源码

JSONModel用法 基本用法 将传入的字典转换成模型&#xff1a; 首先定义模型类&#xff1a; interface Person : JSONModel property (nonatomic, copy) NSString *name; property (nonatomic, copy) NSString *sex; property (nonatomic, assign) NSInteger age; end接…

索引的介绍

目录 1.索引的介绍 1.1 什么是索引 1.2 为什么要使用索引 2.索引应该选择哪种数据结构 3.MYSQL中的页 3.1为什么要使用页 3.2页文件头和页文件尾 3.3 页主体 3.3页目录 3.4数据页头 4.B在MYSQL索引中的应用 4.1计算三层树高的B树可以存放多少条记录 5.索引分类 5.1 主…

居中左右对齐且加粗的蓝色文本

//test.html <!DOCTYPE html> <html> <head> <title>我的网页</title> <link rel"stylesheet" href"styles.css"> </head> <body> <p class"left-text">这是居左对齐且加粗的…

Element走马灯组件循环播放两个页面是方向不一致

摘要&#xff1a;使用Carousel 走马灯循环播放同一类型的图片、文字等内容&#xff0c;会在循环内容为两组是出现下图 [1]中的现象。本文记录下如何解决 之前项目遇到过一次这个问题&#xff0c;由于indicator-position 指示器不用显示&#xff0c;则判断内容长度为2时&#xf…

springboot通过tomcat部署项目(包含jar、war两种方式,迄今为止全网最详细!2024更新..建议收藏,教学!万字长文!)

本博客参考的所有文章均已在结尾声明&#xff01;&#xff01;&#xff01; 在 Spring Boot 项目中&#xff0c;有两种常见的部署方式&#xff1a; 1、使用 Spring Boot 自带的 内置 Tomcat&#xff0c;将项目打包为 jar 并直接运行。 2、使用 外置 Tomcat&#xff0c;将项目打…

【电路笔记】-运算放大器比较器

运算放大器比较器 文章目录 运算放大器比较器1、概述2、表示2.1 同相比较器2.2 反相比较器3、临界点转换4、施密特触发器4.1 同相触发器4.2 反相触发器4.3 应用5、总结1、概述 在前面的大多数运算放大器文章中,电路都有一个到反相输入的反馈环路。 这种设计是最常见的,因为它…

海外社媒干货:Twitter的特点及运营策略

当你在海外社交媒体上运营&#xff0c;了解不同平台的特点和具体实践是非常重要的。本期让小编来为你介绍推特&#xff08;Twitter&#xff09;以及一些相关的运营干货&#xff1a; &#xff08;图片源于网络&#xff09; Twitter简介 推特是一家美国社交网络及微博客服务的公…

通过Python代码发送量化交易信号邮件通知

量化交易利用数学模型和计算机算法来分析市场数据,并生成交易信号,本文将介绍如何使用Python编写一个简单的脚本,通过发送邮件通知量化交易信号。 开启SMTP服务 首先要在发件箱的邮件设置中,将POP3/SMPT服务开启,记录下授权密码,在本地可通过此密码登录,注意有效期和保…

【C++ Primer Plus习题】16.9

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> #include <ctime> #include <v…

6000 字掌握 Java IO 知识体系

“子谦&#xff0c;Java IO 也太上头了吧&#xff1f;”新兵蛋子小二向头顶很凉快的老韩抱怨道&#xff0c;“你瞧&#xff0c;我就按照传输方式对 IO 进行了一个简单的分类&#xff0c;就能搞出来这么多的玩意&#xff01;” 好久没搞过 IO 了&#xff0c;老王看到这幅思维导图…

LLM - 理解 多模态大语言模型(MLLM) 的 预训练(Pre-training) 与相关技术 (三)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142167709 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 完备(F…

数字自然资源领域的实现路径

在数字化浪潮的推动下&#xff0c;自然资源的管理与利用正经历着前所未有的变革。本文将从测绘地理信息与遥感专业的角度&#xff0c;深度分析数字自然资源领域的实现路径。 1. 基础数据的数字化 数字自然资源的构建&#xff0c;首先需要实现基础数据的数字化。这包括地形地貌…