串口数据接收、发送与USB转串口驱动下载

  • 一、串口参数设置
  • 二、串口数据发送
  • 三、串口数据接收
  • 四、USB转串口驱动下载
  • 参考文档

一、串口参数设置

串口是一种非常通用的设备通信的协议(不要与通用串行总线Universal Serial Bus(USB)混淆)。
在C#中使用System.IO.Ports中的SerialPort类实现对串口的操作,包括设置端口号、波特率、数据位、校验位及停止位等参数,和进行数据接收与发送。

属性名称 释义
PortName 串口名 串口对于操作系统来说是一个文件,如果设置PortName为本机不存在的串口名(即文件名),如“COM7”或“COMK”,Open()打开串口将失败,提示“端口COM7不存在”。
BaudRate 波特率 衡量符号传输速率的参数,单位 bit/s, 默认值9600,即每秒传输1200Byte数据,大约1KB数据。
DataBits 数据位 每个字节的标准数据位长度, 默认值8。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。
StopBits 停止位数 每个字节的标准停止位数,默认值One。用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
Parity 校验位 获取或设置奇偶校验检查协议 默认值None。在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。
ReceivedBytesThreshold DataReceived 事件发生前内部输入缓冲区中的字节数 默认值1。
BytesToRead 获取接收缓冲区中数据的字节数。
BytesToWrite 获取发送缓冲区中数据的字节数。

串口参数设置实例代码如下:

using System.IO.Ports;
......
public SerialPort serialPort = new SerialPort();//定义连接端口
serialPort.PortName = "COM1";//设置端口号为COM1
serialPort.BaudRate = 9600;//设置波特率为9600
serialPort.DataBits = 8;//设置数据位为8
serialPort.StopBits = System.IO.Ports.StopBits.One;//设置停止位为1
serialPort.Parity = System.IO.Ports.Parity.None;//设置校验位为无

二、串口数据发送

在System.IO.Ports中共有两种方法发送数据,分别为Write和WriteLine,Write有三种重载,分别为Write(string text)、Write(byte[] buffer, int offset, int count)、Write(char[] buffer, int offset, int count),WriteLine(string text)在写入字符串的后面加了一个NewLine值,示例代码如下:

String[] portnames = SerialPort.GetPortNames();//获取计算机中可用的所有串口号
serialPort.Open();//打开串口
if (!serialPort.IsOpen)
{MessageBox.Show("端口打开失败");return;
}
byte[] SendData = new byte[5];
Encoding chs = Encoding.GetEncoding("gb2312");
SendData[4] = chs.GetBytes("o")[0];
SendData[3] = chs.GetBytes("l")[0];
SendData[2] = chs.GetBytes("l")[0];
SendData[1] = chs.GetBytes("e")[0];
SendData[0] = chs.GetBytes("h")[0];
serialPort.Write(SendData, 0, 5);//通过字节数组发送“hello”字符串
serialPort.Write("hello");//直接发送“hello”字符串

三、串口数据接收

串口数据接收有两种方式,方式一注册数据接收事件,当串口接收到数据时就会触发该事件,可在事件进行数据处理。实例代码如下:

serialPort.DataReceived += serialPort_DataReceived;//注册数据接收处理事件serialPort_DataReceived
private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{Thread.Sleep(50);  //(毫秒)等待一定时间,确保数据的完整性     int len = serialPort.BytesToRead;//接收的字节长度string receivedata = string.Empty;if (len != 0){byte[] buff = new byte[len];serialPort.Read(buff, 0, len);//接收len长度的字节到buff数组receivedata = Encoding.Default.GetString(buff);}MessageBox.Show("接收数据为:"receivedata);
}

缓冲区数据读取之后,读取的字节会从缓冲区中自动删除。如缓冲区数据未全部取出,那么数据接收事件会第二次被触发。
方式二为在主线程外单独开启一个数据接收线程,接收线程中使用循环不断查询缓冲区是否有接收数据,这里不再提供演示代码。

四、USB转串口驱动下载

在进行程序编写时,有时需要使用笔记本进行串口调试,但大多数笔记本一般没有配备串口,通常会使用USB转串口转接线来连接串口,这时需要安装对应驱动笔记本才能识别串口,这里分享一个驱动下载地址,需要注意的是对于不同串口需要安装不同驱动,而通常的USB转串口驱动一般为下载地址中的CH343SER.ZIP。

参考文档

C#串口SerialPort常用属性方法
ASCII码与16进制转换对照表
C#中COM串口连接、发送、接收数据
驱动&工具

串口数据接收、发送与USB转串口驱动下载相关推荐

  1. MAC安装USB转串口驱动

    MAC安装USB转串口驱动 下载驱动 如果芯片是PL2303,则下载PL2303主控芯片的驱动,打开网站 Prolific 官网,下载最新的MAC串口驱动. http://www.prolific.c ...

  2. linux 下串口转usb不能发送数据包,Linux ,USB转串口驱动,没法读到数据

    Linux ,USB转串口驱动,无法读到数据 usb 1-1.1: new full-speed USB device number 5 using ehci-pci usb 1-1.1: New U ...

  3. 关于串口数据的发送和接收(调试必备)

    前言 对于串口的数据发送和接收,大多是都是利用串口中断来进行的,但是这样对于编程方面有一定要求,并且程序也不太好写,比如说,如果让你随意接收一段数据,然后利用串口将它发送出来,第一个需要考虑的问题就是 ...

  4. USB转串口驱动分析(一)

    之前追踪代码用的grep命令效率太低了,所以这次下载C代码阅读跳转利器ctags.cscope用于分析代码 因为用的是Centos6.7所以需要用到yum install安装软件 [wuyujun@w ...

  5. Linux Ubuntu18.04系统 USB转串口驱动安装,查看串口号

    When you plugin your USB-UART converter, and run "> ls /dev/tty*", if you don't see the ...

  6. linux下usb转串口驱动分析

    linux下usb转串口驱动分析 分类: linux driver 2012-06-08 15:11 456人阅读 评论(0) 收藏 举报 linux struct interface returni ...

  7. Linux环境下使用 USB转串口驱动(二)

    minicom是linux下串口通信的软件,它的使用完全依靠键盘的操作,虽然没有"超级终端"那么易用,但是使用习惯之后读者将会体会到它的高效与便利,下面将讲解minicom的安装和 ...

  8. 【Qt串口调试助手】1.2 - 串口数据接收不发生换行,CH340 / CP2102 多硬件兼容

    上一篇提到:对串口接收的显示,使用的是当前位置插入+移动鼠标光标到末尾的方式.这种方法可以有效解决 串口数据接收发生换行的问题,并且解决 CH340 / CP2102 多硬件显示结果不一致的问题.那有 ...

  9. CH341SER CH340SER USB转串口驱动

    CH341SER CH340SER USB转串口驱动适用于同型号的设备,这个USB转串口设备我们可能用不到,但是对于专业的开发者来说可能会用到,将设备与电脑连接后安装一下小编提供的USB转串口驱动程序 ...

  10. pl2303hxa串口线驱动_PL2303 USB转串口驱动64位(非认证线缆可用)_下载_热门驱动_驱动精灵...

    Prolific PL2303 (串口线)USB转串口驱动3.3.2.102版For WinXP-64/Vista-64/Win7-64/Win8-64/Win8.1-64/Win10-64.目前主流 ...

最新文章

  1. 【开放书】《命令行数据科学指南(第二版)》
  2. 为0用c语言怎么写,应输出“1990”,该怎么写用C语言编程写 – 手机爱问
  3. #串口通信超时处理_【学院推荐】划重点!LabVIEW中串口参数需注意的几点
  4. 进击的Android Hook 注入术《一》
  5. pytorch简单框架
  6. [COCI 2018#5]Parametriziran
  7. 从 Angular 移植到 React,代码量减少了 20%
  8. 利用线程池单线程下载网页信息
  9. 为什么我们需要企业架构?
  10. BiometricPrompt之三 - Fingerprint, Iris, Face UI优先级
  11. 【记录】非常实用,Python编码规范的一些建议(1)
  12. Bitmap、BitSet、RoaringBitmap持久化存储
  13. OJ每日一练——乘方计算
  14. java redis srem_Java Jedis.srem方法代碼示例
  15. SSIS之Foreach循环容器(文件枚举器)遍历文件(关键点 详细步骤 图文讲解)
  16. Dao层service层controller层mannager层和biz层详解
  17. 三国人物结构化数据 - Characters_of_the_Three_Kingdoms
  18. 19年你在区块链行业收获了什么?
  19. 谁是消费金融场景之王?
  20. Java使用POI生成柱状图导出到word文档(柱状图)

热门文章

  1. 中国省市区地址三级联动jQuery插件 - distpicker
  2. Java 链表元素如何从键盘输入 面试 笔试高频
  3. 英特尔核显驱动hd630_全新CPU性能天梯图,十代英特尔与R3 3100/3300X定位讲解
  4. html屏幕阅读器,支持移动触摸的网页版PDF格式文件阅读器插件
  5. 教程 海湾主机crt_海湾消防主机JB-QT-GST5000火灾报警控制器(联动型)与crt是怎么连接编公式的...
  6. linux展示文件最尾部内容 最新,LINUX tailf命令-显示文件的末尾若干行内容
  7. win10 清理回收站右键
  8. Linux C程序实现查看文件夹大小
  9. java逻辑面试题_java学习必备——java逻辑推理面试题
  10. Dlib模型之驾驶员疲劳检测一(眨眼)