背景

App需要串口进行通讯,在此做个记录和简要说明。

正文

  1. 添加命名空间
  1. using System.IO.Ports;
  1. 实例化串口
  1. SerialPort serialPortO = new SerialPort();
  1. 设置SerialPort参数
  1. // 获取当前所有的COM口讯息
  2. String[] serialPort1Array = SerialPort.GetPortNames();
  3. if (serialPort1Array != null && serialPort1Array.Length != 0)
  4. {
  5. // 对串口进行排序
  6. Array.Sort<String>(serialPort1Array);
  7. // 选择首个串口
  8. serialPortO.PortName = serialPort1Array[0];
  9. // 波特率 9600
  10. serialPortIn.BaudRate = 9600;
  11. // 数据位为 8 位
  12. serialPortO.DataBits = 8;
  13. // 停止位为 1 位
  14. serialPortO.StopBits = StopBits.One;
  15. // 无奇偶校验位
  16. serialPortO.Parity = Parity.None;
  17. // 读取串口超时时间为1000ms
  18. serialPortO.ReadTimeout = 1000;
  19. }
  1. 打开串口
  1. if(serialPortO.IsOpen)
  2. {
  3. serialPortO.Close();
  4. }
  5. try
  6. {
  7. serialPortO.Open();
  8. }
  9. catch (Exception ex)
  10. { // 捕捉异常
  11. Console.Write(ex);
  12. }
  1. 往串口写入数据
  1. if((serialPortO != null) && (serialPortO.IsOpen))
  2. {
  3. byte[] buf = new byte[2];
  4. buf[0] = 0x01;
  5. buf[1] = 0x02;
  6. try
  7. {
  8. // 参数1:发送数据的缓存位置
  9. // 参数2:缓存数据位置的偏移值
  10. // 参数3:发送数据字节大小
  11. serialPortO.Write(buf, 0, 2);
  12. }
  13. catch (Exception ex)
  14. { // 捕捉异常
  15. Console.Write(ex);
  16. }
  17. }
  1. 从串口读数据

    SerialPort类有一个数据接收事件,可如下注册数据接收事件,
  1. //serialPortIn_DataReceived便是数据接收事件处理函数
  2. serialPortIn.DataReceived += serialPortIn_DataReceived;

参考MSDN文档SerialPort.DataReceived EventDataReceived事件的描述,当接收到eof字符时,就算没有达到ReceivedByteThreshold的阈值条件,DataReceived事件也会产生,并且DataReceived事件并不能保证每次都能在接收条件均符合时能准确的产生DataReceived事件,由此可见,在DataReceived事件处理函数中,不能直接处理接收到的数据,因为有可能没有接收完全,因此在该事件函数中应该只可对数据进行压栈处理,然后另外开一个线程出栈并处理这些数据才更为稳妥。

  1. //读函数如下
  2. if((serialPortO != null) && (serialPortO.IsOpen))
  3. {
  4. byte[] revbuf = new byte[2];
  5. try
  6. {
  7. // 参数1:读取数据的缓存位置
  8. // 参数2:缓存读取据位置的偏移值
  9. // 参数3:读取数据字节大小
  10. serialPortO.Read(revbuf, 0, 2);
  11. }
  12. catch (Exception ex)
  13. { // 捕捉异常
  14. Console.Write(ex);
  15. }
  16. }

至此记录完毕。

参考链接

记录时间:2017-5-9

记录地点:深圳WZ

Visual studio之C# 串口通讯SerialPort的更多相关文章

  1. Android Studio的串口通讯开发

    基于android-serialport-api实现 前言RS232标准接口UARTRS232与UART转接下载 NDK 和构建工具创建支持 C/C++ 的新项目编译C/C++代码串口通讯原理关于校验 ...

  2. (c#2.0)serialPort串口通讯

    原文:(c#2.0)serialPort串口通讯 using System; using System.Collections.Generic; using System.ComponentModel ...

  3. .NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用

    目录 1,前言 2,安装虚拟串口软件 3,新建项目,加入 flyfire.CustomSerialPort 4,flyfire.CustomSerialPort 说明 5,开始使用 flyfire.C ...

  4. 用Visual Studio 2015成功编译、发布UMDF驱动到目标机!!

    开发工具:Visual Studio 2015企业版 主      机:windows10 X64企业版,主机是安装了Visual Studio 2015的操作系统,主要进行驱动开发和调试. 目  标 ...

  5. C#串口通讯实例

    本文参考<C#网络通信程序设计>(张晓明  编著) 程序界面如下图: 参数设置界面代码如下: using System; using System.Collections.Generic; ...

  6. Java利用Rxtx进行串口通讯

    最近在做传感器数据采集的工作,底层是基于Zigbee的无线传感网络,所有数据采集到Zigbee协调器上然后通知上位机数据采集完成,上位机通过USB转串口去读取数据就可以了.那么问题来了,如何进行串口通 ...

  7. Qt5 FOR WINCE7, Visual Studio 2008环境的搭建

    Qt5 FOR WINCE7, Visual Studio 2008环境的搭建 Qt5发布时,试过配置Qt5 for wince的环境,原因是暂时不支持WINCE.前几天意外发现官方博客说明已经开始支 ...

  8. Visual Studio 2017 新特性

    全新的安装体检 VS2017更好的支持了按需安装的特点,用户可以仅选择需要的功能安装,节省了不少的Disk 最小的安装仅有几百兆,但也支持20多种编程语言的编辑和源码管理 支持创建自定义的离线安装包 ...

  9. 开源纯C#工控网关+组态软件(九)定制Visual Studio

    一.   引子 因为最近很忙(lan),很久没发博了.不少朋友对那个右键弹出菜单和连线的功能很感兴趣,因为VS本身是不包含这种功能的.   大家想这是什么鬼,怎么我的设计器没有,其实这是一个微软黑科技 ...

随机推荐

  1. Beaglebone Black教程Beaglebone Black的引脚分配

    Beaglebone Black教程Beaglebone Black的引脚分配 Beaglebone Black的引脚分配 绝大多数的微型开发平台都提供了一些称为GPIO的输入输出端口.这些端口可以让 ...

  2. ES5 Object.defineProperty 方法

    先看一个例子: var o = {}; o.a = 1; // 等待于: Object.defineProperty(o, 'a', { value: 1, writable: true, confi ...

  3. 利用FusionCharts制作统计报表

    今天在开发中需要用到统计报表,于是就查找了一下FusionCharts的用法,下面来总结一下利用FusionCharts怎么制作统计报表 1.建表 首先要建立所要统计报表的表,表的字段越多,统计的维度 ...

  4. [转]OpenSessionInView模式

    OpenSessionInView模式解决的问题:   * hibernate事物边界问题   * 因session关闭导致hibernate延迟加载例外的问题 事物边界:     一个事物的完成应该 ...

  5. Linux文件查找命令find和xargs详解

    PS:find是个很强大的命令,能够匹配正则,查找对应权限,能够帮你精确的定位你的系统中的任何地方任何目录下的文件.下面这篇是关于find命令用法最详细的一篇了,记录下.还有要注意的:本文的分号:其实 ...

  6. JavaScript入门详解

    开始开发工作. 一.Alert Confirm Prompt <html> <head> <script type="text/javascript" ...

  7. 20 Inno Setup制作安装包的几个问题

    系统开发好之后,通常需要制作成安装包,才能卖给用户.利用Inno Setup的向导可以制作简单的安装包,但是如果要做个好的安装包的话可能会遇到一些麻烦,今日终于抽空解决了,Inno Setup打包的一 ...

  8. for of 与 for in的区别2

    遍历数组通常使用for循环,ES5的话也可以使用forEach,ES5具有遍历数组功能的还有map.filter.some.every.reduce.reduceRight等,只不过他们的返回结果不一 ...

  9. 使用Busybox制作CRAMFS文件系统成功

    转:http://www.360doc.com/content/11/1013/22/7775902_155877501.shtml 这几天在使用Busybox制作FS2410开发板的CRAMFS文件 ...

  10. 课程学习:Linux系统管理

    版本 内核版本 发行版本 常见Linux发行版本 ubuntu: 易用,可靠:技术支持付费,生态稍弱 debin: 精简,稳定,可靠; 更新较慢, 无技术支持,软件过时, 企业不太用 opensuse ...