C#实现简单串口通信

为了实现串口通信,首先需要掌握C#中的串口通信相关类和方法。常用的类有SerialPort和SerialDataReceivedEventArgs,常用的方法有Open和Write等。下面分步骤讲解实现串口通信的完整攻略。

1. 新建C#控制台应用程序

首先,打开Visual Studio,新建一个C#控制台应用程序。选择“新建项目”-->“Visual C#”-->“控制台应用程序”,然后填写应用程序名称和保存路径,点击“创建”按钮。

2. 添加串口通讯类

在项目中添加一个类,用于串口通讯。右键单击项目工程文件,选择“添加”-->“新建项”,在弹出的添加新项对话框中,选择“类”,命名为“SerialCommunication.cs”。

3. 编写串口通讯类

在SerialCommunication.cs文件中,首先需要引用System.IO.Ports命名空间,并添加一个SerialPort对象,在类的构造函数中初始化串口通讯相关的参数,比如波特率(BaudRate)、数据位(DataBits)、停止位(StopBits)等等。然后,需要编写串口开启(Open)和关闭(Close)方法,以及数据发送(Write)和数据接收(DataReceived)方法。

using System;
using System.IO.Ports;

class SerialCommunication
{
    private SerialPort serialPort = new SerialPort();

    public SerialCommunication(string portName)
    {
        serialPort.PortName = portName;
        serialPort.BaudRate = 9600;
        serialPort.DataBits = 8;
        serialPort.StopBits = StopBits.One;
        serialPort.Parity = Parity.None;
        serialPort.ReadTimeout = 500;
        serialPort.WriteTimeout = 500;
        serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
    }

    public void Open()
    {
        try 
        {
            serialPort.Open();
            Console.WriteLine("串口已开启");
        } 
        catch (Exception ex) 
        {
            Console.WriteLine(ex.Message);
        } 
    }

    public void Close()
    {
        try 
        {
            serialPort.Close();
            Console.WriteLine("串口已关闭");
        } 
        catch (Exception ex) 
        {
            Console.WriteLine(ex.Message);
        } 
    }

    public void Write(string data)
    {
        if (serialPort.IsOpen)
        {
            try
            {
                serialPort.WriteLine(data);
            }
            catch (Exception ex) 
            {
                Console.WriteLine(ex.Message);
            }
        }
        else 
        {
            Console.WriteLine("串口未连接");
        }
    }

    private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string data = sp.ReadExisting();
        Console.WriteLine("收到数据:" + data);
    }
}

在以上代码中,当串口接收到数据时,会触发DataReceived事件,并调用DataReceivedHandler方法来处理接收到的数据。

4. 使用串口通讯类

在控制台应用程序的Main函数中,实例化SerialCommunication类,然后调用Open方法打开串口,调用Write方法发送数据,最后调用Close方法关闭串口。示例代码如下:

static void Main(string[] args)
{
    SerialCommunication serialCommunication = new SerialCommunication("COM1");
    serialCommunication.Open();
    serialCommunication.Write("Hello World");
    serialCommunication.Close();

    Console.ReadLine();
}

5. 示例说明

下面给出两个示例,演示如何在C#中实现串口通信。

示例一:单片机发送数据到电脑

在单片机代码中,使用UART向电脑端口发送数据。C#代码打开串口,接收单片机发送的数据,然后在控制台上输出。

// 单片机代码
void main()
{
    while(1)
    {
        UART_Write_String("Hello World\n");
        delay_ms(1000);
    }
}


// C#代码
static void Main(string[] args)
{
    SerialCommunication serialCommunication = new SerialCommunication("COM1");
    serialCommunication.Open();
    Console.ReadLine();
    serialCommunication.Close();

    Console.ReadLine();
}

private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    string data = sp.ReadExisting();
    Console.WriteLine("Received data: " + data);
}

示例二:电脑发送数据到单片机

在C#代码中,打开串口,向电脑端口发送数据。单片机代码使用UART接收数据,并打印到串口调试器上。

// 单片机代码
void main()
{
    while(1)
    {
        char buf[128];
        int len = UART_Read(buf, sizeof(buf));
        if(len > 0)
        {
            UART_Write(buf, len);
        }
        delay_ms(100);
    }
}


// C#代码
static void Main(string[] args)
{
    SerialCommunication serialCommunication = new SerialCommunication("COM1");
    serialCommunication.Open();
    serialCommunication.Write("Hello World");
    serialCommunication.Close();

    Console.ReadLine();
}

以上就是使用C#实现简单串口通讯的完整攻略,通过以上步骤,你就可以实现基础的串口通讯功能了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现简单串口通信 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • ASP.NET Core2读写InfluxDB时序数据库的方法教程

    ASP.NET Core2读写InfluxDB时序数据库的方法教程 InfluxDB是一个开源的时序数据库,它专门用于存储和查询时间序列数据。在本攻略中,我们将详细讲解如何在ASP.NET Core2应用程序中读写InfluxDB时序数据库。 步骤一:安装InfluxDB 在开始之前,您需要安装InfluxDB。您可以从InfluxDB官网下载并安装最新版本…

    C# 2023年5月17日
    00
  • C#中AutoResetEvent控制线程用法小结

    下面就详细讲解一下C#中AutoResetEvent控制线程用法的完整攻略。 什么是AutoResetEvent? AutoResetEvent是一个同步基元,也是用于多线程编程的一个重要之一,它用于协调多个线程之间的同步。AutoResetEvent主要有两个用途: 线程等待 线程信号 AutoResetEvent是系统提供的,可以定时地向操作系统CPU请…

    C# 2023年6月6日
    00
  • 手把手教你AspNetCore WebApi认证与授权的方法

    手把手教你AspNetCore WebApi认证与授权的方法 在ASP.NET Core WebApi中,认证和授权是非常重要的安全措施。在本攻略中,我们将介绍如何在ASP.NET Core WebApi中实现认证和授权,并提供两个示例说明。 步骤一:添加认证和授权中间件 首先,需要在ASP.NET Core WebApi中添加认证和授权中间件。可以使用以下…

    C# 2023年5月17日
    00
  • C#设置MDI子窗体只能弹出一个的方法

    要实现C#中的MDI子窗体只能弹出一个的功能,可以通过以下步骤来实现: 首先,需要在程序启动时禁用MDI窗体的自动创建子窗体的功能,以便手动创建并管理子窗体。可以通过设置IsMdiContainer属性为false实现。 this.IsMdiContainer = false; 在需要弹出子窗体的地方,先检查当前是否已经存在同类型的子窗体,如果存在则不再弹出…

    C# 2023年5月15日
    00
  • c# 实现计时器功能

    下面是c#实现计时器功能的完整攻略: 1. 创建计时器控件 首先需要创建一个计时器控件,可以实现计时器的各种功能。计时器控件可以通过Visual Studio的工具箱来添加,或者在代码中创建。创建计时器控件的方法: // 创建计时器控件 Timer timer = new Timer(); 2. 设置计时器控件属性 在创建计时器控件之后,需要设置计时器控件的…

    C# 2023年6月1日
    00
  • C#如何防止程序多次运行的技巧

    C#如何防止程序多次运行的技巧有多种,下面我们将介绍两种实现方法。 方法一:利用文件锁 利用文件锁是一种简单有效的防止程序多次运行的技巧。具体实现方法如下: 首先在程序的入口处创建一个文件,例如使用FileStream类创建一个空的文件,命名为lockfile: using System.IO; // … FileStream fs = new File…

    C# 2023年5月15日
    00
  • C#中HttpWebRequest、WebClient、HttpClient的使用详解

    C#中HttpWebRequest、WebClient、HttpClient的使用详解 HttpWebRequest HttpWebRequest是一个用于向Web服务器发送HTTP请求的类。它可以完成各种任务,例如GET、POST、PUT和DELETE请求。 HttpWebRequest类的使用步骤: 创建一个HttpWebRequest对象。 设置Req…

    C# 2023年6月1日
    00
  • .NET MVC中ViewData,ViewBag和TempData的区别浅析

    视图数据传递的作用 在MVC框架的开发中,视图所需要的数据可以通过视图中的一个变量或对象来接收,因此需要将需要传递的数据先存储到某一个传递的变量中,在视图中再进行读取和使用。而ViewData、ViewBag和TempData这三个可选项都可以用来传递这些数据。 ViewData是一个字典类型的对象,可以用于在控制器和视图之间传递数据,所传递的数据只在请求期…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部