写点什么

C# SerialPort 配置和属性了解

作者:IC00
  • 2022 年 7 月 17 日
  • 本文字数:3161 字

    阅读完需:约 10 分钟

C# SerialPort配置和属性了解

前言

SerilPort 是串口进行数据通信的一个控件,今天博主教大家如何进行配置 SerialPort 对端进行通信。虽然有点简单,大家有兴趣可以耐心看完,我会教大家用 VS2019 的快捷方法和使用代码的方法进行配置,大家不喜勿喷哈哈哈,创作不易。

每日一遍,防止早恋

1 使用 Vs2019 快捷方法进行对 SerialPort 进行配置

1.1 新建窗体应用文件,创建 Serialport 控件


注意:如果你发现自己的工具箱里面没有 Serialport 这个控件,可能是你建错了窗体应用,这个窗体应用是(.NET framework)的文件,


1.2 认识需要配置的属性

BaseStream 获取SerialPort 对象的基础Stream 对象BaudRate 获取或设置串行波特率BreakState 获取或设置中断信号状态BytesToRead 获取接收缓冲区中数据的字节数BytesToWrite 获取发送缓冲区中数据的字节数CDHolding 获取端口的载波检测行的状态CtsHolding 获取“可以发送”行的状态DataBits 获取或设置每个字节的标准数据位长度DiscardNull 获取或设置一个值,该值指示Null 字节在端口和接收缓冲区之间传输时是否被忽略DsrHolding 获取数据设置就绪(DSR) 信号的状态DtrEnable 获取或设置一个值,该值在串行通信过程中启用数据终端就绪(DTR) 信号Encoding 获取或设置传输前后文本转换的字节编码Handshake   获取或设置串行端口数据传输的握手协议   IsOpen   获取一个值,该值指示 SerialPort 对象的打开或关闭状态   NewLine   获取或设置用于解释 ReadLine( )和WriteLine( )方法调用结束的值   Parity   获取或设置奇偶校验检查协议ParityReplace   获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节 PortName   获取或设置通信端口,包括但不限于所有可用的 COM 端口   ReadBufferSize   获取或设置 SerialPort 输入缓冲区的大小   ReadTimeout   获取或设置读取操作未完成时发生超时之前的毫秒数   ReceivedBytesThreshold   获取或设置 DataReceived 事件发生前内部输入缓冲区中的字节数   RtsEnable   获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号    StopBits   获取或设置每个字节的标准停止位数WriteBufferSize 获取或设置串行端口输出缓冲区的大小   WriteTimeout   获取或设置写入操作未完成时发生超时之前的毫秒数1234567891011121314151617181920212223242526
复制代码


根据你的需求进行配置


1.3 Serialport 具体配置

1.3.1 找到到需要的端口号,博主的是 COM3

1.3.2 配置波特率,数据位,端口号

1.3.3 做一个简单的打开,需要发送接收看博主下一篇文章。

2 使用代码进行对 SerialPort 进行配置

2.1 先写一个活动串口扫描,实现自动扫描端口号

2.1.1 拖一个这样的窗口

2.1.2 双击串口扫描,写一个函数。


private void SearchAndAddSerialToComboBox(object sender, EventArgs e)        {            string Buffer;            comboBox1.Items.Clear();    //清初之前已经扫描的记录            for (int i = 0; i < 20; i++)            {                try                {                    Buffer = "COM" + i.ToString(); //获得COM1-20                    serialPort1.PortName = Buffer;     //获取COM信息                    serialPort1.Open();                 //打开串口                    comboBox1.Items.Add(Buffer);                    comboBox1.Text = Buffer; //添加串口得到记录集                    serialPort1.Close();                 //关闭串口                }                catch { }            }        }123456789101112131415161718
复制代码

串口自动扫描效果

2.1.3 对波特率,数据位,校验位,停止位配置,先在 ComboBox 里面添加选项


其他和这个步骤一样,小编把小编的配置值给大家:


波特率:11030060012002400480096001440019200384005600057600115200数据位:678校验位:None奇校验偶校验Mark空格校验停止位:11.52
复制代码

2.1.4 双击“打开”按钮 在函数里写好对应的配置,进行配置。

2.1.5 代码如下

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO.Ports;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;
namespace Serilport{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void SearchAndAddSerialToComboBox(object sender, EventArgs e) { string Buffer; comboBox1.Items.Clear(); //清初之前已经扫描的记录 for (int i = 0; i < 20; i++) { try { Buffer = "COM" + i.ToString(); //获得COM1-20 serialPort1.PortName = Buffer; //获取COM信息 serialPort1.Open(); //打开串口 comboBox1.Items.Add(Buffer); comboBox1.Text = Buffer; //添加串口得到记录集 serialPort1.Close(); //关闭串口 } catch { } } }
private void button4_Click(object sender, EventArgs e) { try { serialPort1.PortName = comboBox1.Text; serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text, 10); serialPort1.DataBits = Convert.ToInt32(comboBox3.Text, 10); if (comboBox4.Text == "None") { serialPort1.Parity = Parity.None; } else if (comboBox4.Text == "奇校验") { serialPort1.Parity = Parity.Odd; } else if (comboBox4.Text == "偶校验") { serialPort1.Parity = Parity.Even; } else if (comboBox4.Text == "Mark") { serialPort1.Parity = Parity.Mark; } else if (comboBox4.Text == "空格校验") { serialPort1.Parity = Parity.Space; } if (comboBox5.Text == "1") { serialPort1.StopBits = StopBits.One; } else if (comboBox5.Text == "1.5") { serialPort1.StopBits = StopBits.OnePointFive; } else if (comboBox5.Text == "1.5") { serialPort1.StopBits = StopBits.Two; } //serialPort1.ReadTimeout(2000); serialPort1.Open(); button2.Enabled = false;//打开串口按钮不可用 //button3.Enabled = true;//关闭串口 } catch { MessageBox.Show("端口错误,请检查串口", "错误"); } } }}
复制代码

2.1.6 效果如下

总结

SerialPort 是一个串口传输的一个非常方便的控件,对从事上位机测试的人是一个很好的控件,很多做嵌入式开发的人,他们的大部分界面都是用 C#写的,难免会用到这个控件,如果你需要了解 SerialPort 发送和接收,请关注博主下一篇文章。创作不易,点赞,关注,有什么问题请评论指教,谢谢。



用户头像

IC00

关注

还未添加个人签名 2022.07.14 加入

还未添加个人简介

评论

发布
暂无评论
C# SerialPort配置和属性了解_C#_IC00_InfoQ写作社区