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

Nuget包名称

System.IO.Ports

参考代码

cs 复制代码
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();

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

相关推荐
张小凡vip1 小时前
python--爬虫--经验积累的遇到的坑
开发语言·爬虫·python
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之云服务集成与多因子认证设计
java·开发语言·spring
门思科技2 小时前
LoRaWAN 网络容量估算:一个 SX1302 网关到底能带多少设备
开发语言·网络·php
大草原的小灰灰2 小时前
Python基础语法
开发语言·python
泡泡鱼(敲代码中)3 小时前
MySQL基础学习笔记:从数据模型到DDL全掌握
开发语言·数据库·笔记·学习·mysql
唐青枫4 小时前
别只会看日志:C#.NET SOS 调试扩展从 Dump 到内存泄漏排查
c#·.net
潜创微科技5 小时前
IT6520:USB-C 转 MIPI 高集成控制器,DP 1.4a 转 MIPI 单芯片搞定 4K120 显示
c语言·开发语言·低延迟·掌机·联阳
Escalating_xu5 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm
傲世仙尊5 小时前
System V 进程间通信详解:共享内存、消息队列与信号量(CSDN博客)
linux·开发语言·c++
cvby6 小时前
C++11
开发语言·c++