【代码】使用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.rhkb.cn/news/427115.html

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

相关文章

【环境问题】清除僵尸进程 | 深度学习任务中止但是GPU仍在占用

我一般遇到这种是本地网络意外中断了&#xff0c;程序不见了&#xff0c;但是GPU仍在占用。 1.确认GPU显存&#xff1a; 终端输入 nvidia-smi 查看显存使用情况&#xff1a; 2.查看所有进程&#xff1a; 输入fuser -v /dev/nvidia* 查看进程。如果出现bash: fuser: command no…

数据结构——链表(短小精悍版)

使用链表结构可以克服数组链表需要预先知道数据大小的缺点 链表结构可以充分利用计算机内存空间&#xff0c;实现灵活的内存动态管理。 但是链表失去了数组随机读取的优点&#xff0c;同时链表由于增加了结点的指针域&#xff0c;空间开销比较大。 单向链表&#xff1a; 一个…

【kafka】生产者

1. 主要参数&#xff1a; **bootstrap.servers&#xff1a;**该参数用来指定生产者客户端连接Kafka集群所需的broker地址清单&#xff0c;具体的内容格式为host1&#xff1a;port1&#xff0c;host2&#xff1a;port2&#xff0c;可以设置一个或多个地址&#xff0c;中间以逗号…

《Google软件测试之道》笔记

介绍 GTAC&#xff1a;Google Test Automation Conference&#xff0c;Google测试自动化大会。 本书出版之前还有一本《微软测试之道》&#xff0c;值得阅读。 质量不是被测试出来的&#xff0c;但未经测试也不可能开发出有质量的软件。质量是开发过程的问题&#xff0c;而不…

ROS第五梯:ROS+VSCode+C++单步调试

解决问题&#xff1a;在ROS项目中进行断点调试。 第一步&#xff1a;创建一个ROS项目或者打开一个现有的ROS项目。 第二步&#xff1a;修改c_cpp_properties.json 增加一段命令: "compileCommands": "${workspaceFolder}/build/compile_commands.json"第三…

线结构光测量系统标定--导轨

光平面标定原理可查看之前的博文《光平面标定》&#xff0c;光条中心提取可参考线结构光专栏光条中心提取系列的文章&#xff0c;相机标定参考相机标定专栏中的博文。&#xff08;欢迎进Q群交流&#xff1a;874653199&#xff09; 线结构光测量系统(指一个线结构光传感器与一个…

rocky9虚拟机配置双网卡的详细过程

编辑虚拟机配置->添加->选择网络适配器->确认->打开虚拟机 1.ip add查看第二个网卡的名称&#xff0c;我这里是ens36 2.cd到网卡的配置文件目录 cd /etc/NetworkManager/system-connections/ ls3.复制一份网卡的配置文件并改名为ens36.nmconnection(根据自己的第…

计算机网络(运输层)

物理层、数据链路层以及网络层共同解决了将主机通过异构网络互联起来所面临的问题&#xff0c;实现了主机与主机之间的通信。 实际上在计算机网络中进行通信的真正实体事位于通信两端主机中的进程。 运输层的任务就会是提供运行在不同主机上的应用进程提供直接的通信服务&…

pybind11 学习笔记

pybind11 学习笔记 0. 一个例子1. 官方文档1.1 Installing the Library1.1.1 Include as A Submodule1.1.2 Include with PyPI1.1.3 Include with Conda-forge 1.2 First Steps1.2.1 Separate Files1.2.2 PYBIND11_MODULE() 宏1.2.3 example.cpython-38-x86_64-linux-gnu.so 的…

常见 HTTP 状态码详解与Nginx 文件上传大小限制

在我们日常使用 Nginx 搭建网站或应用服务时&#xff0c;可能会遇到很多与文件上传和请求响应相关的问题。今天我们就来聊聊 如何限制文件上传的大小&#xff0c;并介绍一些常见的 HTTP 状态码 及其在 Nginx 中的处理方式。 一、文件上传大小限制 有时&#xff0c;我们需要限…

从入门到精通,玩转Python的print函数(探索Python print函数的隐藏功能)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 基础用法参数详解示例📝 高级用法自定义分隔符和结束符输出到文件追加模式📝 覆盖打印与进度条简单覆盖打印动态进度条示例代码⚓️ 相关链接 ⚓️📖 介绍 📖 刚开始学习编程时,我们接触到的第一个方…

【初阶数据结构】一文讲清楚 “堆” 和 “堆排序” -- 树和二叉树(二)(内含TOP-K问题)

文章目录 前言1. 堆1.1 堆的概念1.2 堆的分类 2. 堆的实现2.1 堆的结构体设置2.2 堆的初始化2.3 堆的销毁2.4 添加数据到堆2.4.1 "向上调整"算法 2.5 从堆中删除数据2.5.1 “向下调整”算法 2.6 堆的其它各种方法接口函数 3. 堆排序3.1 堆排序的代码实现 4. TOP-K问题…

微软Office全家桶再爆办公革命,o1模型加持重塑十亿人工作流!1句话生成PPT+自定义智能体

颠覆全球十亿打工人的Office办公全家桶&#xff0c;昨夜迎来重磅升级&#xff01; 在微软Copilot第二弹发布会上&#xff0c;CEO纳德拉官宣&#xff0c;「用AI构思&#xff0c;共同协作的全新工作流——WebWorkPages正式开启」。 全程半小时&#xff0c;每一幕都在透露着&…

GPT代码记录

#include <iostream>// 基类模板 template<typename T> class Base { public:void func() {std::cout << "Base function" << std::endl;} };// 特化的子类 template<typename T> class Derived : public Base<T> { public:void…

基于JDK1.8和Maven的GeoTools 28.X源码自主构建实践

目录 前言 一、GeoTools与Jdk的版本关系 1、GeoTools与Jdk版本 2、编译环境简介 二、使用Maven编译GeoTools28.X 1、GeoTools28.x 2、Maven的完整编译 3、构建时的问题 三、总结 前言 想要学习和掌握一个开源软件或者项目&#xff0c;源码是我们主要学习的内容。学习开…

JDBC笔记

文章目录 准备MySQL数据的建立和建表 idea 建工程和模块设置属性配置文件编写JDBC代码URL的设置JDBC 代码配置文件 准备MySQL 数据的建立和建表 idea 建工程和模块 设置属性配置文件 编写JDBC代码 URL的设置 JDBC 代码 package com.yanyu;import java.sql.*; import java.util…

vue2.0+ts注册全局函数和几个递归查找

vue2.0ts注册全局函数和几个递归查找 一、main.ts 一、main.ts // 定义你的全局函数,判断是否有按钮权限 interface Item {label: string;checked: number;[k: string]: any; } // 获取按钮时候权限 function globalLable(arr: Item[], label: string): boolean {for (const i…

硬件基础知识

驱动开发分为&#xff1a;裸机驱动、linux驱动 嵌入式&#xff1a;以计算机技术为基础&#xff0c;软硬结合的、可移植、可剪裁的专用计算机 单片机最小单元&#xff1a;vcc gnd reset 晶振 cpu --- soc :system on chip 片上外设 所有的程序都是在soc&#xff08;cpu&…

1.熟悉接口测试(Postman工具)

一、接口及其类型 API&#xff0c;应用编程接口&#xff0c;简称接口 通过接口&#xff0c;可以让程序和程序之间&#xff0c;能够互相交互。 接口分为两大类&#xff1a; 1&#xff09;基于TCP全双工&#xff08;适用于postman&#xff09; 2&#xff09;基于HTTP半双工 二、…