96.如何使用C#实现串口发送? C#例子

news2025/6/9 3:51:24

Nuget包名称

System.IO.Ports

参考代码

using System;
using System.IO.Ports;
using System.Threading;

namespace test
{
    class Program
    {
        static void Main()
        {
            SerialPort port = new SerialPort("COM1", 9600); // 配置串口
            port.Open();

            Timer timer = new Timer((_) =>
            {
                port.WriteLine("Hello"); // 发送数据
                Console.WriteLine("Data sent: Hello");
            }, null, 0, 4); // 每4毫秒发送一次,每秒250次
        }
    }
}

代码解释

1. 引入必要的命名空间

using System;
using System.IO.Ports;
using System.Threading;
  • System.IO.Ports:提供对串口通信的支持,包含 SerialPort 类。

  • System.Threading:提供 Timer 类,用于定时任务。

2. 创建并配置串口

SerialPort port = new SerialPort("COM1", 9600); // 配置串口
  • SerialPort 构造函数的第一个参数是串口名称(如 "COM1"),第二个参数是波特率(如 9600)。

  • 你可以根据实际需求修改串口名称和波特率。例如,如果你的设备连接在 COM3,波特率为 115200,则应修改为

    SerialPort port = new SerialPort("COM3", 115200);

3. 打开串口

port.Open();
  • 在发送数据之前,必须调用 Open() 方法打开串口。如果串口已经打开,再次调用 Open() 会抛出异常。

4. 定时发送数据

Timer timer = new Timer((_) =>
{
    port.WriteLine("Hello"); // 发送数据
    Console.WriteLine("Data sent: Hello");
}, null, 0, 4); // 每4毫秒发送一次,每秒250次
  • 使用 System.Threading.Timer 创建一个定时任务,每隔 4 毫秒调用一次回调函数。

  • 在回调函数中,通过 port.WriteLine("Hello") 将字符串 "Hello" 发送到串口。

  • Console.WriteLine("Data sent: Hello") 用于在控制台输出发送的数据,方便调试。

  • Timer 的构造参数:

    • 第一个参数是回调函数。

    • 第二个参数是回调函数的参数(此处传入 null)。

    • 第三个参数是延迟时间(单位:毫秒),设置为 0 表示立即开始。

    • 第四个参数是执行间隔时间(单位:毫秒),此处设置为 4 毫秒。

5. 注意事项

  • 串口名称和波特率:确保串口名称和波特率与你的设备匹配。如果不确定设备的串口名称,可以在 Windows 的设备管理器中查看。

  • 异常处理:在实际应用中,建议添加异常处理机制,例如在打开串口或发送数据时捕获异常,避免程序因串口问题而崩溃。

    try
    {
        port.Open();
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error opening port: " + ex.Message);
    }
  • 关闭串口:在程序结束时,应调用 port.Close() 关闭串口,释放资源。

    port.Close();

通过以上代码和解释,你可以快速实现一个简单的串口发送功能。根据实际需求,你可以进一步扩展功能,例如接收串口数据、动态配置串口参数等。

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

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

相关文章

【工具使用】STM32CubeMX-FreeRTOS操作系统-信号标志、互斥锁、信号量篇

一、概述 无论是新手还是大佬,基于STM32单片机的开发,使用STM32CubeMX都是可以极大提升开发效率的,并且其界面化的开发,也大大降低了新手对STM32单片机的开发门槛。     本文主要讲述STM32芯片FreeRTOS信号标志、互斥锁和信号…

大数据Spark(六十一):Spark基于Standalone提交任务流程

文章目录 Spark基于Standalone提交任务流程 一、Standalone-Client模式 1、提交命令 2、任务执行流程 二、Standalone-Cluster模式 1、提交命令 2、任务执行流程 Spark基于Standalone提交任务流程 在Standalone模式下,Spark的任务提交根据Driver程序运行的位…

Android 平台RTSP/RTMP播放器SDK接入说明

一、技术背景 自2015年起,大牛直播SDK持续深耕音视频直播领域,自主研发并迭代推出跨平台 RTSP/RTMP 播放模块,具备如下核心优势: 全平台兼容:支持 Android/iOS/Windows/Linux 等主流系统; 超低延迟&#…

Nodejs工程化实践:构建高性能前后端交互系统

一、工程架构设计 1.1 现代化项目初始化 采用多包管理架构: mkdir content-platform && cd content-platform npm init -y npx lerna init mkdir -p {packages/client,packages/server,packages/shared} 关键模块划分: client/: 基于Next.js…

STM32什么是寄存器

提示:文章 文章目录 前言一、背景二、2.12.2 三、3.1 总结 前言 前期疑问: 1、什么是寄存器? 答:在4GB的地址空间中,512MB的block2上,每4个字节组成32位,这个32位为一个单元,控制&a…

第六个微信小程序:教师工具集

源于工作需要,下面开始。 安装及使用 | Taro 文档 vscode 代码管理 git 辅助 开发技术如上: 1.开始创建模板 taro4.1.1 $ taro init teachers-tools 2.用vsocde开始吧。 选择 第二个文件夹找一。 (base) PS D:\react\teachers-tools> pnpm…

记录一个用了很久的git提交到github和gitee比较方便的方法

在当前git init后,在隐藏的git文件夹中找到config文件 [user]name thels [remote "github"]url your github repository urlfetch refs/heads/*:refs/remotes/origin/* [remote "gitee"]url your gitee repository urlfetch refs/heads/*:…

Qt Qml模块功能及功能解析

QtQml 是 Qt 6.0 中用于声明式 UI 开发和应用程序逻辑的核心模块,它提供了 QML 语言的支持和运行时环境。 一、主要功能 1. QML 语言支持 QML 语法解析:支持 QML (Qt Meta-Object Language 或 Qt Modeling Language) 的完整语法 JavaScript 集成&…

NLP学习路线图(二十九):BERT及其变体

在自然语言处理(NLP)领域,一场静默的革命始于2017年。当谷歌研究者发表《Attention is All You Need》时,很少有人预料到其中提出的Transformer架构会彻底颠覆NLP的发展轨迹,更催生了以GPT系列为代表的语言模型风暴,重新定义了人类与机器的交互方式。 一、传统NLP的瓶颈:…

【LLM-Agent】智能体的记忆缓存设计

note 实践:https://modelscope-agent.readthedocs.io/zh-cn/latest/modules/memory.html 文章目录 note一、Agent的记忆实现二、相关综述三、记忆体的构建四、cursor的记忆设计1. 记忆生成提示词2. 记忆评估提示词 五、记忆相关的MCPReference 一、Agent的记忆实现…

一起学Spring AI:核心概念

人工智能概念 本节描述了 Spring AI 使用的核心概念。我们建议您仔细阅读,以理解 Spring AI 实现背后的思想。 模型(Models) 人工智能模型是设计用来处理和生成信息的算法,通常模仿人类的认知功能。通过从大型数据集中学习模式…

PicSharp(图片压缩工具) v1.1.6

PicSharp 一个简单、高效、灵活的跨平台桌面图像压缩应用程序。软件基于Rust实现,高性能低资源,能快速扫描文件或目录,批处理图像。软件还具备组合压缩策略,TinyPNG提供最佳压缩比,但需要互联网连接,对大量…

前端文件下载常用方式详解

在前端开发中,实现文件下载是常见的需求。根据不同的场景,我们可以选择不同的方法来实现文件流的下载。本文介绍三种常用的文件下载方式: 使用 axios 发送 JSON 请求下载文件流使用 axios 发送 FormData 请求下载文件流使用原生 form 表单提…

【DAY42】Grad-CAM与Hook函数

内容来自浙大疏锦行python打卡训练营 浙大疏锦行 知识点: 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 作业:理解下今天的代码即可 在深度学习中,我们经常需要查看或修改模型中间层的输出或梯度。然而,标准的前向传播和反…

如何生成和制作PDF文件

在数字化办公的今天,PDF文件已经成为我们工作和学习中不可或缺的一部分。无论是合同、报告、简历,还是电子书、表单,PDF格式都以其跨平台兼容性、不可编辑性和清晰的排版而被广泛使用。但你是否知道,生成和制作PDF文件其实并不复杂…

【K8S系列】Kubernetes 中 Pod(Java服务)启动缓慢的深度分析与解决方案

本文针对 Kubernetes 中 Java 服务启动时间慢的深度分析与解决方案文章,结合了底层原理、常见原因及具体优化策略: Kubernetes 中 Java 服务启动缓慢的深度分析与高效解决方案 在 Kubernetes 上部署 Java 应用时,启动时间过长是常见痛点,尤其在需要快速扩缩容或滚动更新的…

【Java学习笔记】StringBuilder类(重点)

StringBuilder(重点) 1. 基本介绍 是一个可变的字符串序列。该类提供一个与 StringBuffer 兼容的 API,但不保证同步(StringBuilder 不是线程安全的) 该类被设计用作 StringBuffer 的一个简易替换,用在字符…

iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆栈溢出

在vue项目中使用iview 框架部分组件时,直接引入使用报Maximum call stack size exceeded image.png 堆栈溢出 解决方案 更换组件名称就可以了 image.png 或 image.png 就可以了 猜测是因为和vue自己提供的组件名称一致了,重名问题导致的,具体…

基于Halcon深度学习之分类

***** ***环境准备*** ***系统:win7以上系统 ***显卡:算力3.0以上 ***显卡驱动:10.1以上版本(nvidia-smi查看指令)***读取深度学习模型*** read_dl_model (pretrained_dl_classifier_compact.hdl, DLModelHandle) ***获…

技巧小结:根据寄存器手册写常用外设的驱动程序

需求:根据STM32F103寄存器手册写DMA模块的驱动程序 一、分析标准库函数的写法: 各个外设的寄存器地址定义在stm32f10x.h文件中:此文件由芯片厂家提供;内核的有关定义则定义在core_cm3.h文件中:ARM提供; 1、查看外设区域多级划分…