C# SerialPort配置和属性了解

前言

SerilPort是串口进行数据通信的一个控件,今天博主教大家如何进行配置SerialPort对端进行通信。当使用 C# 进行串口通信时,可以使用 SerialPort 类来配置和管理串口的属性。SerialPort 类提供了一组用于串口通信的方法和属性,可用于发送和接收数据。SerialPort 类的常用属性包括 PortName、BaudRate、Parity、DataBits、StopBits、Handshake、ReadTimeout 和 WriteTimeout 等。这些属性用于指定串口的名称、波特率、校验位、数据位、停止位、握手协议以及读取和写入数据时的超时时间等。要使用 SerialPort 类进行串口通信,需要先配置 SerialPort 对象的属性,然后使用 Open() 方法打开串口,使用 Write() 方法发送数据,使用 Read() 方法读取数据,并使用 Close() 方法关闭串口。在发送和接收数据时,可以使用事件来处理数据的到达和发送完成等情况。掌握 SerialPort 类的配置和属性,可以帮助您更好地进行串口通信虽然有点简单,大家有兴趣可以耐心看完,我会教大家用VS2019的快捷方法和使用代码的方法进行配置,大家不喜勿喷哈哈哈,创作不易。

每日一遍,防止早恋

202104151615410442.gif

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

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

image.png

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

image.png

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   获取或设置写入操作未完成时发生超时之前的毫秒数

根据你的需求进行配置
image.png

1.3 Serialport具体配置

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

image.png

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

image.png

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

image.png

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

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

2.1.1 拖一个这样的窗口

image.png

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

image.png

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 { }
            }
        }
串口自动扫描效果

image.png

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

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

波特率:
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 双击“打开”按钮 在函数里写好对应的配置,进行配置。

image.png

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 效果如下

image.png

总结

配置串口属性:使用 SerialPort 控件的属性,如 PortName、BaudRate、Parity、DataBits、StopBits、Handshake 等,可以配置串口的名称、波特率、校验位、数据位、停止位和握手协议等。
打开和关闭串口:使用 Open() 方法打开串口连接,使用 Close() 方法关闭串口连接。在打开串口之前,需要先配置好串口的属性。发送和接收数据:使用 Write() 方法向串口发送数据,使用 Read() 方法从串口接收数据。可以设置 ReadTimeout 和 WriteTimeout 属性来控制读取和写入操作的超时时间。
事件处理:SerialPort 控件提供了多个事件,如 DataReceived、ErrorReceived 等,用于处理接收到的数据和错误情况。可以通过事件处理程序来响应这些事件。异常处理:在使用 SerialPort 控件时,需要注意处理可能发生的异常情况,如超时、端口不存在等。可以使用 try-catch 块来捕获并处理异常。通过合理配置 SerialPort 控件的属性,并结合事件处理和异常处理,可以实现可靠的串口通信功能。
SerialPort是一个串口传输的一个非常方便的控件,对从事上位机测试的人是一个很好的控件,很多做嵌入式开发的人,他们的大部分界面都是用C#写的,难免会用到这个控件,如果你需要了解SerialPort发送和接收,请关注博主下一篇文章。创作不易,点赞,关注,有什么问题请评论指教,谢谢。

202104151629418126.gif

  • 33
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
### 回答1: c是英文字母表中的第三个字母。 在罗马数字中,c表示数值100。 在化学元素周期表中,C表示碳元素,原子序数为6。 在计算机编程中,C是一种高级编程语言,它由贝尔实验室的丹尼斯·里奇(Dennis Ritchie)于20世纪70年代初创造。 在企业管理中,C常常代表着“客户”(Customer)或“消费者”(Consumer),在市场营销和销售方面非常重要。 在数学中,c经常用来表示复数的虚部,如a + bi,其中b就是虚部。此外,c也常被用来表示一些常见的数学常数,例如:圆周率π(pi)。 在音乐中,C是一个音符,它在标准西方音乐记谱法中代表着中音do。 在中国传统文化中,C是八十八個卦爻的一個陽爻,代表勢如破竹,成功的開始。 总而言之,字母C在不同领域有着不同的象征意义,它在语言、科学、技术以及文化中都扮演着重要的角色。 ### 回答2: c这个字母在汉语拼音中并没有单独使用,而是通常和其他字母结合形成拼音。在常见的拼音中,c和a、o、e、i、u、un、eng、ui、uo等字母结合形成拼音。例如,ca、co、ce、ci、cu、cun、ceng、cui、cuo等等。 在汉字中,c也是一个常见的字母。它在表示词语时,通常表示某种事物的名称或者概念。例如,车、菜、草、城、猜等等。 此外,在计量单位中,c通常表示摄氏度。摄氏度是一个温度单位,用于表示温度的高低。在摄氏温度中,水的冰点为0℃,沸点为100℃,中间为体温37℃。 综上所述,c是一个在汉语拼音和汉字中出现的常见字母。它在拼音中表示某种音节,而在汉字中表示某种事物的名称或者概念。同时,c也表示摄氏度这个温度单位。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IC00

打赏就发新文

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值