C# ISP 串口调试工具的开发(一)

本文介绍了一款基于C#开发的串口调试工具,该工具支持多种波特率、校验位、数据位和停止位设置,具备读取和设置ISP参数的功能,适用于下位机图像参数调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

由于公司需要开发一个 ISP 串口调试工具,而我也具有一点 C# 的基础,所以给我安排了这个任务。这里将开发过程中的心得记录一下。

开发环境

项目简介:
这个串口调试工具需要支持常用的 300-115200bqs 波特率,能设置校验位、数据位、停止位,在接入下位机后能完成对图像参数的读取与设置,方便工程师通过上位机程序对下位机进行 ISP 参数调试。

项目开发环境:

  • VS2017
  • .NET Framework 4

Winform

首先创建一个 C# 的 Winform 程序。打开 VS2017 选择创建新项目,选择 Visual C# 下的 Windows 桌面,再点击 Windows 窗体应用
创建新的 WinForm

界面布局

UI 界面
先布置一个简单的串口调试工具的 UI 布局,Winform 的 UI 可能不怎么美观,皮肤更换可以使用第三方控件 IrisSkin 快速对 Winform 的样式进行更改,但是会有诸多缺陷,所以想要更加美观的界面还是需要个人花精力来自己设计。

SerialPort 控件

微软 WInform 提供了串口控件 SerialPort,只要两条语句就能够使用:

using System.IO.Ports;

//实例化串口对象
SerialPort serialPort = new SerialPort();

初始化串口参数

先调用 SerialPort.GetPortNames() 方法获取本机所有窗口,然后将获取到的串口添加到 ComboBox 控件 cbSerials 作为候选列表:

/// <summary>
/// 初始化串口界面参数设置
/// </summary>
private void Init_Port_Confs()
{
   
   
    /*------串口界面参数设置------*/
    //检查是否含有串口
    string[] ports = SerialPort.GetPortNames();
    if (ports == null)
    {
   
   
        //cbSerials.SelectedIndex = -1;// 可以设置默认为 -1
        MessageBox.Show("本机没有串口!", "Error");
        return;
    }
    //添加串口选项
    cbSerials.Items.AddRange(ports);
    //设置默认串口选项
    cbSerials.SelectedIndex = 0;

    /*------波特率设置-------*/
    string[] baudRate = {
   
    "9600", "19200", "38400", "57600", "115200" };
    cbBaudRate.Items.AddRange(baudRate);
    cbBaudRate.SelectedIndex = 0;

    /*------数据位设置-------*/
    string[] dataBit = {
   
    "5", "6", "7", "8" };
    cbDataBits.Items.AddRange(dataBit);
    cbDataBits.SelectedIndex = 3;


    /*------校验位设置-------*/
    string[] checkBit = {
   
    "None", "Even", "Odd", "Mask", "Space" };
    cbParity.Items.AddRange(checkBit);
    cbParity.SelectedIndex = 0;

    /*------停止位设置-------*/
    string[] stopBit = {
   
    "None", "One", "Two", "OnePointFive" };
    cbStopBits.Items.AddRange(stopBit);
    cbStopBits.SelectedIndex = 1;
}

另外设置了一个扫描端口的按钮,能够刷新本机的串口列表:

/// <summary>
/// 扫描端口
/// </summary>
private void BtnGetPort_Click(object sender, EventArgs e)
{
   
   
    cbSerials.Text = "";
    cbSerials.Items.Clear();

    string[] str = SerialPort.GetPortNames();
    if (str == null)
    {
   
   
        MessageBox.Show("本机没有串口!", "Error");
        return;
    }

    //添加串口
    foreach (string s in str)
    {
   
   
        cbSerials.Items.Add(s);
    }

    //设置默认串口
    cbSerials.SelectedIndex = 0;
}

窗体初始化

在窗体初始化时,会对串口参数设置初始化:

/// <summary>
/// 加载主窗体
/// </summary>
private void Demo_Load(object sender, EventArgs e)
{
   
   
    // 初始化串口
    Init_Port_Confs();
}

连接串口

SerialPort 自带了串口的打开操作 SerialPort.Open()和串口关闭操作 SerialPort.Close(),在连接串口时,要将选择的串口参数设置串口的属性,并且检测串口异常抛出,然后再打开串口。如果出现打开串口异常时,可以打开警告提示框,也可以重新实例化一个窗口继续操作:

/// <summary>
/// 串口的开关操作
/// </summary>
private void BtnConnectSwitch_Click(object sender, EventArgs e)
{
   
   
    if (!serialPort.IsOpen)// 串口处于关闭状态
    {
   
   
        try
        {
   
   
            // 判断所选端口是否有效
            if (cbSerials.SelectedIndex == -1)
            {
   
   
                MessageBox.Show("错误:无效的端口,请重新选择", "Error");
                return;
            }

            // 获取串口参数
            string strSerialName = cbSerials.SelectedItem.ToString();
            string strBaudRate = cbBaudRate.SelectedItem.ToString();
            string strDataBit = cbDataBits.SelectedItem.ToString();
            string strCheckBit = cbParity.SelectedItem.ToString();
            string strStopBit = cbStopBits.SelectedItem.ToString();

            serialPort.PortName = strSerialName;//串口号
            serialPort.BaudRate = Convert.ToInt32(strBaudRate);//波特率
            serialPort.DataBits = Convert.ToInt32(strDataBit);//数据位

            switch (strStopBit)            //停止位
            {
   
   
                case "None":
                    serialPort.StopBits = StopBits.None;
                    break;
                case "One":
                    serialPort.StopBits = StopBits.One;
                    break;
                case "OnePointFive":
                    serialPort.StopBits = StopBits.OnePointFive;
                    break;
                case "Two":
                    serialPort.StopBits = StopBits.Two;
                    break;
                default:
                    MessageBox.Show("错误:停止位参数不正确!", "Error");
                    break;
            }

            switch (strCheckBit)             //校验位
            {
   
   
                case "None":
                    serialPort.Parity = Parity.None;
                    break;
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值