Visual studio之C# 串口通讯SerialPort
背景
App需要串口进行通讯,在此做个记录和简要说明。
正文
- 添加命名空间
using System.IO.Ports;
- 实例化串口
SerialPort serialPortO = new SerialPort();
- 设置
SerialPort
参数
// 获取当前所有的COM口讯息
String[] serialPort1Array = SerialPort.GetPortNames();
if (serialPort1Array != null && serialPort1Array.Length != 0)
{
// 对串口进行排序
Array.Sort<String>(serialPort1Array);
// 选择首个串口
serialPortO.PortName = serialPort1Array[0];
// 波特率 9600
serialPortIn.BaudRate = 9600;
// 数据位为 8 位
serialPortO.DataBits = 8;
// 停止位为 1 位
serialPortO.StopBits = StopBits.One;
// 无奇偶校验位
serialPortO.Parity = Parity.None;
// 读取串口超时时间为1000ms
serialPortO.ReadTimeout = 1000;
}
- 打开串口
if(serialPortO.IsOpen)
{
serialPortO.Close();
}
try
{
serialPortO.Open();
}
catch (Exception ex)
{ // 捕捉异常
Console.Write(ex);
}
- 往串口写入数据
if((serialPortO != null) && (serialPortO.IsOpen))
{
byte[] buf = new byte[2];
buf[0] = 0x01;
buf[1] = 0x02;
try
{
// 参数1:发送数据的缓存位置
// 参数2:缓存数据位置的偏移值
// 参数3:发送数据字节大小
serialPortO.Write(buf, 0, 2);
}
catch (Exception ex)
{ // 捕捉异常
Console.Write(ex);
}
}
- 从串口读数据
SerialPort
类有一个数据接收事件,可如下注册数据接收事件,
//serialPortIn_DataReceived便是数据接收事件处理函数
serialPortIn.DataReceived += serialPortIn_DataReceived;
参考MSDN文档SerialPort.DataReceived Event对DataReceived事件
的描述,当接收到eof
字符时,就算没有达到ReceivedByteThreshold
的阈值条件,DataReceived事件
也会产生,并且DataReceived事件
并不能保证每次都能在接收条件均符合时能准确的产生DataReceived事件
,由此可见,在DataReceived事件
处理函数中,不能直接处理接收到的数据,因为有可能没有接收完全,因此在该事件函数中应该只可对数据进行压栈处理,然后另外开一个线程出栈并处理这些数据才更为稳妥。
//读函数如下
if((serialPortO != null) && (serialPortO.IsOpen))
{
byte[] revbuf = new byte[2];
try
{
// 参数1:读取数据的缓存位置
// 参数2:缓存读取据位置的偏移值
// 参数3:读取数据字节大小
serialPortO.Read(revbuf, 0, 2);
}
catch (Exception ex)
{ // 捕捉异常
Console.Write(ex);
}
}
至此记录完毕。
参考链接
- MSDN参考文档SerialPort Class;
记录时间:2017-5-9
记录地点:深圳WZ
Visual studio之C# 串口通讯SerialPort的更多相关文章
- Android Studio的串口通讯开发
基于android-serialport-api实现 前言RS232标准接口UARTRS232与UART转接下载 NDK 和构建工具创建支持 C/C++ 的新项目编译C/C++代码串口通讯原理关于校验 ...
- (c#2.0)serialPort串口通讯
原文:(c#2.0)serialPort串口通讯 using System; using System.Collections.Generic; using System.ComponentModel ...
- .NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用
目录 1,前言 2,安装虚拟串口软件 3,新建项目,加入 flyfire.CustomSerialPort 4,flyfire.CustomSerialPort 说明 5,开始使用 flyfire.C ...
- 用Visual Studio 2015成功编译、发布UMDF驱动到目标机!!
开发工具:Visual Studio 2015企业版 主 机:windows10 X64企业版,主机是安装了Visual Studio 2015的操作系统,主要进行驱动开发和调试. 目 标 ...
- C#串口通讯实例
本文参考<C#网络通信程序设计>(张晓明 编著) 程序界面如下图: 参数设置界面代码如下: using System; using System.Collections.Generic; ...
- Java利用Rxtx进行串口通讯
最近在做传感器数据采集的工作,底层是基于Zigbee的无线传感网络,所有数据采集到Zigbee协调器上然后通知上位机数据采集完成,上位机通过USB转串口去读取数据就可以了.那么问题来了,如何进行串口通 ...
- Qt5 FOR WINCE7, Visual Studio 2008环境的搭建
Qt5 FOR WINCE7, Visual Studio 2008环境的搭建 Qt5发布时,试过配置Qt5 for wince的环境,原因是暂时不支持WINCE.前几天意外发现官方博客说明已经开始支 ...
- Visual Studio 2017 新特性
全新的安装体检 VS2017更好的支持了按需安装的特点,用户可以仅选择需要的功能安装,节省了不少的Disk 最小的安装仅有几百兆,但也支持20多种编程语言的编辑和源码管理 支持创建自定义的离线安装包 ...
- 开源纯C#工控网关+组态软件(九)定制Visual Studio
一. 引子 因为最近很忙(lan),很久没发博了.不少朋友对那个右键弹出菜单和连线的功能很感兴趣,因为VS本身是不包含这种功能的. 大家想这是什么鬼,怎么我的设计器没有,其实这是一个微软黑科技 ...
随机推荐
- Beaglebone Black教程Beaglebone Black的引脚分配
Beaglebone Black教程Beaglebone Black的引脚分配 Beaglebone Black的引脚分配 绝大多数的微型开发平台都提供了一些称为GPIO的输入输出端口.这些端口可以让 ...
- ES5 Object.defineProperty 方法
先看一个例子: var o = {}; o.a = 1; // 等待于: Object.defineProperty(o, 'a', { value: 1, writable: true, confi ...
- 利用FusionCharts制作统计报表
今天在开发中需要用到统计报表,于是就查找了一下FusionCharts的用法,下面来总结一下利用FusionCharts怎么制作统计报表 1.建表 首先要建立所要统计报表的表,表的字段越多,统计的维度 ...
- [转]OpenSessionInView模式
OpenSessionInView模式解决的问题: * hibernate事物边界问题 * 因session关闭导致hibernate延迟加载例外的问题 事物边界: 一个事物的完成应该 ...
- Linux文件查找命令find和xargs详解
PS:find是个很强大的命令,能够匹配正则,查找对应权限,能够帮你精确的定位你的系统中的任何地方任何目录下的文件.下面这篇是关于find命令用法最详细的一篇了,记录下.还有要注意的:本文的分号:其实 ...
- JavaScript入门详解
开始开发工作. 一.Alert Confirm Prompt <html> <head> <script type="text/javascript" ...
- 20 Inno Setup制作安装包的几个问题
系统开发好之后,通常需要制作成安装包,才能卖给用户.利用Inno Setup的向导可以制作简单的安装包,但是如果要做个好的安装包的话可能会遇到一些麻烦,今日终于抽空解决了,Inno Setup打包的一 ...
- for of 与 for in的区别2
遍历数组通常使用for循环,ES5的话也可以使用forEach,ES5具有遍历数组功能的还有map.filter.some.every.reduce.reduceRight等,只不过他们的返回结果不一 ...
- 使用Busybox制作CRAMFS文件系统成功
转:http://www.360doc.com/content/11/1013/22/7775902_155877501.shtml 这几天在使用Busybox制作FS2410开发板的CRAMFS文件 ...
- 课程学习:Linux系统管理
版本 内核版本 发行版本 常见Linux发行版本 ubuntu: 易用,可靠:技术支持付费,生态稍弱 debin: 精简,稳定,可靠; 更新较慢, 无技术支持,软件过时, 企业不太用 opensuse ...