前言
SerilPort是串口进行数据通信的一个控件,今天博主教大家如何进行配置SerialPort对端进行通信。当使用 C# 进行串口通信时,可以使用 SerialPort 类来配置和管理串口的属性。SerialPort 类提供了一组用于串口通信的方法和属性,可用于发送和接收数据。SerialPort 类的常用属性包括 PortName、BaudRate、Parity、DataBits、StopBits、Handshake、ReadTimeout 和 WriteTimeout 等。这些属性用于指定串口的名称、波特率、校验位、数据位、停止位、握手协议以及读取和写入数据时的超时时间等。要使用 SerialPort 类进行串口通信,需要先配置 SerialPort 对象的属性,然后使用 Open() 方法打开串口,使用 Write() 方法发送数据,使用 Read() 方法读取数据,并使用 Close() 方法关闭串口。在发送和接收数据时,可以使用事件来处理数据的到达和发送完成等情况。掌握 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 获取或设置写入操作未完成时发生超时之前的毫秒数
根据你的需求进行配置
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 { }
}
}
串口自动扫描效果
2.1.3 对波特率,数据位,校验位,停止位配置,先在ComboBox 里面添加选项
其他和这个步骤一样,小编把小编的配置值给大家:
波特率:
110
300
600
1200
2400
4800
9600
14400
19200
38400
56000
57600
115200
数据位:
6
7
8
校验位:
None
奇校验
偶校验
Mark
空格校验
停止位:
1
1.5
2
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 == "2")
{
serialPort1.StopBits = StopBits.Two;
}
//serialPort1.ReadTimeout(2000);
serialPort1.Open();
button2.Enabled = false;//打开串口按钮不可用
//button3.Enabled = true;//关闭串口
}
catch
{
MessageBox.Show("端口错误,请检查串口", "错误");
}
}
}
}
2.1.6 效果如下
总结
配置串口属性:使用 SerialPort 控件的属性,如 PortName、BaudRate、Parity、DataBits、StopBits、Handshake 等,可以配置串口的名称、波特率、校验位、数据位、停止位和握手协议等。
打开和关闭串口:使用 Open() 方法打开串口连接,使用 Close() 方法关闭串口连接。在打开串口之前,需要先配置好串口的属性。发送和接收数据:使用 Write() 方法向串口发送数据,使用 Read() 方法从串口接收数据。可以设置 ReadTimeout 和 WriteTimeout 属性来控制读取和写入操作的超时时间。
事件处理:SerialPort 控件提供了多个事件,如 DataReceived、ErrorReceived 等,用于处理接收到的数据和错误情况。可以通过事件处理程序来响应这些事件。异常处理:在使用 SerialPort 控件时,需要注意处理可能发生的异常情况,如超时、端口不存在等。可以使用 try-catch 块来捕获并处理异常。通过合理配置 SerialPort 控件的属性,并结合事件处理和异常处理,可以实现可靠的串口通信功能。
SerialPort是一个串口传输的一个非常方便的控件,对从事上位机测试的人是一个很好的控件,很多做嵌入式开发的人,他们的大部分界面都是用C#写的,难免会用到这个控件,如果你需要了解SerialPort发送和接收,请关注博主下一篇文章。创作不易,点赞,关注,有什么问题请评论指教,谢谢。