C# 串口通讯示例代码

using System;
using System.IO.Ports;
using System.Text;
namespace ConsoleApplication2
{
    internal class Program
    {
        public static void Main(string[] args)
        {

            Console.WriteLine("可用串口列表:");
            string[] ports = SerialPort.GetPortNames();
            foreach (string port in ports)
            {
                Console.WriteLine(port);
            }

            Console.Write("请输入要连接的串口(例如COM3):");
            string portName = Console.ReadLine();

            SerialPort serialPort = new SerialPort(
                portName: portName,
                baudRate: 9600,
                parity: Parity.None,
                dataBits: 8,
                stopBits: StopBits.One
            );

            serialPort.Encoding = Encoding.UTF8; // 设置编码格式
            serialPort.ReadTimeout = 500;       // 读取超时时间(毫秒)
            serialPort.WriteTimeout = 500;      // 写入超时时间(毫秒)

// 注册数据接收事件
            serialPort.DataReceived += (sender, e) =>
            {
                var sp = (SerialPort)sender;
                try
                {
                    if (sp.IsOpen)
                    {
                        string data = sp.ReadExisting();
                        Console.WriteLine($"[接收] {data}");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"接收数据时出错:{ex.Message}");
                }
            };

            try
            {
                serialPort.Open();
                Console.WriteLine("串口已成功打开。输入消息发送(输入 'exit' 退出)...");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"打开串口失败:{ex.Message}");
                return;
            }

// 发送消息循环
            string input;
            do
            {
                input = Console.ReadLine() ?? "";
                if (input.Equals("exit", StringComparison.OrdinalIgnoreCase))
                    break;

                try
                {
                    if (serialPort.IsOpen)
                    {
                        serialPort.WriteLine(input);
                        Console.WriteLine($"[发送] {input}");
                    }
                    else
                    {
                        Console.WriteLine("串口未打开,无法发送。");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"发送数据时出错:{ex.Message}");
                }
            } while (true);

// 关闭串口(using语句会自动处理)
            Console.WriteLine("程序退出。");
        }
    }
}

 

posted @ 2025-05-16 18:52  liliyou  阅读(90)  评论(0)    收藏  举报