尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C# 串口调试助手

C# 串口调试助手
📅 发布时间:2026/6/20 7:41:26

C#串口调试助手实现,使用Windows Forms和.NET的SerialPort类。这个应用程序允许用户配置串口参数、发送和接收数据,并支持十六进制显示。

using System;
using System.IO.Ports;
using System.Text;
using System.Windows.Forms;namespace SerialPortDebugger
{public partial class MainForm : Form{private SerialPort serialPort;private bool isHexDisplay = false;private bool isHexSend = false;private bool isConnected = false;public MainForm(){InitializeComponent();InitializeSerialPort();RefreshPortList();}private void InitializeSerialPort(){serialPort = new SerialPort();serialPort.DataReceived += SerialPort_DataReceived;}private void RefreshPortList(){string[] ports = SerialPort.GetPortNames();cmbPortName.Items.Clear();cmbPortName.Items.AddRange(ports);if (ports.Length > 0)cmbPortName.SelectedIndex = 0;}private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e){int bytesToRead = serialPort.BytesToRead;byte[] buffer = new byte[bytesToRead];serialPort.Read(buffer, 0, bytesToRead);// 跨线程更新UIthis.Invoke(new Action(() =>{if (isHexDisplay){string hexString = BitConverter.ToString(buffer).Replace("-", " ");txtReceivedData.AppendText(hexString + " ");}else{string text = Encoding.UTF8.GetString(buffer);txtReceivedData.AppendText(text);}}));}private void btnRefreshPorts_Click(object sender, EventArgs e){RefreshPortList();}private void btnOpenClose_Click(object sender, EventArgs e){if (isConnected){ClosePort();}else{OpenPort();}}private void OpenPort(){try{serialPort.PortName = cmbPortName.Text;serialPort.BaudRate = int.Parse(cmbBaudRate.Text);serialPort.DataBits = int.Parse(cmbDataBits.Text);serialPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cmbStopBits.Text);serialPort.Parity = (Parity)Enum.Parse(typeof(Parity), cmbParity.Text);serialPort.Open();isConnected = true;UpdateConnectionStatus();}catch (Exception ex){MessageBox.Show($"打开串口失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);}}private void ClosePort(){try{if (serialPort.IsOpen){serialPort.Close();}isConnected = false;UpdateConnectionStatus();}catch (Exception ex){MessageBox.Show($"关闭串口失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);}}private void UpdateConnectionStatus(){btnOpenClose.Text = isConnected ? "关闭串口" : "打开串口";gbSerialConfig.Enabled = !isConnected;lblStatus.Text = isConnected ? $"已连接到 {serialPort.PortName}" : "未连接";lblStatus.ForeColor = isConnected ? System.Drawing.Color.Green : System.Drawing.Color.Red;}private void btnSend_Click(object sender, EventArgs e){if (!isConnected){MessageBox.Show("请先打开串口", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}try{string data = txtSendData.Text;if (isHexSend){// 处理十六进制发送data = data.Replace(" ", "");byte[] hexBytes = new byte[data.Length / 2];for (int i = 0; i < hexBytes.Length; i++){hexBytes[i] = Convert.ToByte(data.Substring(i * 2, 2), 16);}serialPort.Write(hexBytes, 0, hexBytes.Length);}else{// 文本发送if (chkAppendNewLine.Checked){data += Environment.NewLine;}serialPort.Write(data);}}catch (Exception ex){MessageBox.Show($"发送数据失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);}}private void chkHexDisplay_CheckedChanged(object sender, EventArgs e){isHexDisplay = chkHexDisplay.Checked;}private void chkHexSend_CheckedChanged(object sender, EventArgs e){isHexSend = chkHexSend.Checked;}private void btnClearReceived_Click(object sender, EventArgs e){txtReceivedData.Clear();}private void btnClearSend_Click(object sender, EventArgs e){txtSendData.Clear();}private void MainForm_FormClosing(object sender, FormClosingEventArgs e){if (serialPort.IsOpen){serialPort.Close();}}}
}

界面设计代码

还需要创建一个对应的窗体设计器代码(MainForm.Designer.cs),或者使用Visual Studio的设计器创建界面。

partial class MainForm
{private System.ComponentModel.IContainer components = null;private GroupBox gbSerialConfig;private ComboBox cmbPortName;private ComboBox cmbBaudRate;private ComboBox cmbDataBits;private ComboBox cmbStopBits;private ComboBox cmbParity;private Button btnRefreshPorts;private Button btnOpenClose;private Label lblStatus;private GroupBox gbReceivedData;private TextBox txtReceivedData;private CheckBox chkHexDisplay;private Button btnClearReceived;private GroupBox gbSendData;private TextBox txtSendData;private CheckBox chkHexSend;private CheckBox chkAppendNewLine;private Button btnSend;private Button btnClearSend;protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}private void InitializeComponent(){// 这里应该由Visual Studio设计器自动生成代码// 以下是控件的基本初始化建议this.gbSerialConfig = new GroupBox();this.cmbPortName = new ComboBox();this.cmbBaudRate = new ComboBox();this.cmbDataBits = new ComboBox();this.cmbStopBits = new ComboBox();this.cmbParity = new ComboBox();this.btnRefreshPorts = new Button();this.btnOpenClose = new Button();this.lblStatus = new Label();this.gbReceivedData = new GroupBox();this.txtReceivedData = new TextBox();this.chkHexDisplay = new CheckBox();this.btnClearReceived = new Button();this.gbSendData = new GroupBox();this.txtSendData = new TextBox();this.chkHexSend = new CheckBox();this.chkAppendNewLine = new CheckBox();this.btnSend = new Button();this.btnClearSend = new Button();// 设置控件属性、位置和事件// 这里需要详细设置每个控件的位置、大小、文本等属性// 以及添加事件处理器}
}

说明

  1. 串口配置:

    • 选择可用的COM端口
    • 设置波特率(常用9600, 115200等)
    • 设置数据位(通常为8)
    • 设置停止位(通常为1)
    • 设置校验位(通常为None)
  2. 数据接收:

    • 接收的数据会显示在接收文本框中
    • 可以选择以十六进制格式显示数据
  3. 数据发送:

    • 在发送文本框中输入要发送的数据
    • 可以选择以十六进制格式发送数据
    • 可以选择发送时自动附加换行符
  4. 其他功能:

    • 可以清空接收或发送文本框
    • 可以刷新可用的COM端口列表

参考代码 C# 串口调试助手源码(COM口) www.3dddown.com/cna/54343.html

事项

  1. 确保已安装相应的串口驱动程序
  2. 确保串口没有被其他程序占用
  3. 发送和接收的十六进制数据应以空格分隔(例如:48 65 6C 6C 6F)

相关新闻

  • AutoGPT任务规划算法拆解:从目标到子任务的生成逻辑
  • 2025年B2B投放KPI指南:SEO+SEM整合营销与社媒营销的ROI与转化追踪
  • LobeChat能否对接飞书机器人?企业办公协同实践

最新新闻

  • MC68HC912BD32串行通信与Byteflight协议深度解析
  • Switch虚拟Amiibo终极指南:免费解锁游戏隐藏内容
  • 2026年初中毕业学西点推荐好的学校用户力荐 - mypinpai
  • 深入解析S12MSCANV2:从CAN总线原理到MC9S12实战配置
  • 艺愿星为什么优于艺考志愿宝 - 速递信息
  • 5个诊断式技巧:解决SillyTavern角色卡片创建的三大痛点

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号