串口通信例子SeriaPort

本篇例子使用的虚拟串口转自这位博主:http://t.csdnimg.cn/LSGIs

串口COM: 是一种用于联接计算机和外设设备的接口,也叫串行接口,简称com,常见的串口有一般电脑应用的RS-232(使用25帧或者9帧的连接器) 通俗来讲串口就是usb接口、鼠标窗口。键盘串口

串口通讯: 是指外设和计算机 通过数据信号线、地线按照一定的协议进行双向通信的方式。

C# 通过SerialPort类获取串口相关的数据 并且提供发送和接收数据的方法 ,需要引用System.IO.Ports;命名空间

将虚拟串口安装完之后

添加COM1和COM2串口

这边XCOM选择一个串口

代码

搭建链接的界面

创建一个全局的串口对象
readonly SerialPort port = new SerialPort();
对串口添加一下配置:

波特率:用于描述通信每秒传递的数据的速度

单位是bit/s,常见的波特率是9600bit,1Byte是8bit 9600bit/8 = 1200字符,也就是1s发送1200个字符

注意波特率不能太大 也不能太小,如果太大了传输的数据不稳定,如果两端的波特率不一致会导致数据不一致,如果太小了

反应太慢

port.BaudRate = 9600; // 设置波特率
 2 StopBits停止位 : 标志着传输一个字符的结束

StopBits 是一个枚举类型,可选择的有1位 1.5位 2位,默认值是1位

port.StopBits = StopBits.One;
3 DataBits 数据位: 通信过程中真正的有效信息,数据位可以双方通过约定进行控制 一般可以5,6,7,8
默认值是8位
            port.DataBits = 8;
4 Parity 奇数偶校检位 只占1位,指的是逻辑高位是奇数和或者偶数,高位就是1,低位就是0

        可取值有 Parity.None不采用校检
        Parity.Even 偶数校检,保证传输过程中高位数是个偶数个
        Parity.Odd  奇数校检,保证传输过程中高位个数是奇数个

port.Parity = Parity.None;
5 设置要连接的串口名
 port.PortName = "COM1";
6 Encoding 编码格式设置显示以什么样的格式显示
默认16进制格式
            port.Encoding = Encoding.Default;

打开串口按钮事件

private void button1_Click(object sender, EventArgs e)
{
    // 7 IsOpen 当前串口
    // true 为打开状态
    // false 关闭状态
    if (!port.IsOpen) // 没打开
    {
        // 8 open 打开串口
        port.Open();
        // 9 打开之后 要设置以下两个属性为true
        // DtrEnable 为true,启用数据终端就绪,发送一个dtr信号。
        port.DtrEnable = true;

        // RtsEnable 为true 证明请求可以发送了,发送一个rts信号
        port.RtsEnable = true;
        button1.Text = "关闭串口";
    }
    else
    {
        button1.Text = "打开串口";

        // 10 关闭串口
        port.Close();
    }
}
 11 接收数据事件 必须配置的是波特率和设置串口
 port.DataReceived += Port_DataReceived;
 Port_DataReceived方法
bool isDefault = true;// 代表编码方式 true代表默认默认编码
private void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    // 接收数据并且显示
    // l3 BytesToWrite 从缓存区读取数据的长度
    byte[] bs = new byte[port.BytesToRead];

    // 14.Read从缓存区读取数据
    port.Read(bs, 0, bs.Length); // 从缓存区读取数据

    // 
    string value = null;
    // 以那些编码方式展示数据
    this.Invoke((EventHandler)delegate
    {
        if (isDefault)
        {
            // 16进制显示 item就是其中的一个16进制
            foreach (var item in bs)
            {
                value +=" " + item.ToString("X"); // X代表16进制
            }
        }
        else
        {
            // GetEncoding("gb2312") 国标2312编码格式
            value = Encoding.GetEncoding("gb2312").GetString(bs);
        }
        richTextBox1.Text += value + "\r\n";
        richTextBox1.SelectionStart = richTextBox1.Text.Length;
        richTextBox1.ScrollToCaret();
        // 15 DiscardInBuffer清空缓存区
        port.DiscardInBuffer(); // 清空缓存区

    });

}
发送数据按钮事件
private void button3_Click(object sender, EventArgs e)
{
    byte[] bs = Encoding.UTF8.GetBytes(this.textBox1.Text);
    // 12Write 发送数据
    port.Write(bs, 0, bs.Length);
}

运行结果如下,文字显示为16进制显示

  • 29
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值