背景

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

正文

  1. 添加命名空间
using System.IO.Ports;
  1. 实例化串口
SerialPort serialPortO = new SerialPort();
  1. 设置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;
}
  1. 打开串口
if(serialPortO.IsOpen)
{
serialPortO.Close();
}
try
{
serialPortO.Open();
}
catch (Exception ex)
{ // 捕捉异常
Console.Write(ex);
}
  1. 往串口写入数据
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);
}
}
  1. 从串口读数据

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

参考MSDN文档SerialPort.DataReceived EventDataReceived事件的描述,当接收到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);
}
}

至此记录完毕。

参考链接

记录时间: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. VB查询数据库之报表——机房收费系统总结(六)

    我们要用一个软件做报表的模板.然后在VB里面添加部件.代码调用模板,详细步骤如下. 一.下载安装 首先做报表要下载安装Grid++Report 4.5 报表设计器 点击下载(内含破解补丁) 二.制作模 ...

  2. 概率dp学习记录

    论文参考 汤可因<浅谈一类数学期望问题的解决方法> 反正是很神奇的东西吧..我脑子不好不是很能想得到. bzoj 1415 1415: [Noi2005]聪聪和可可 Time Limit: ...

  3. Codeforces Round #341 (Div. 2) D. Rat Kwesh and Cheese 数学

    D. Rat Kwesh and Cheese 题目连接: http://www.codeforces.com/contest/621/problem/D Description Wet Shark ...

  4. “Warning: Call-time pass-by-reference has been deprecated in”解决方法

    刚刚在调试一个PHP木马,显示错误信息为: Warning: Call-time pass-by-reference has been deprecated in E:\New-Hack520org\ ...

  5. 探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用23

    前言 首先说明这并不是一个教程贴,而记事本应用是网上早有的案例,对于学习 vuex 非常有帮助.我的目的是探索 vuex 2.0 ,然后使用 vuejs 2.0 + vuex 2.0 重写这个应用,其 ...

  6. Android显示GIF动画 GifView

    android中显示gif动画原生态一般支持的不是很好,故找了一个开源的项目,现简单介绍如下: GifView 是一个为了解决android中现在没有直接显示gif的view,只能通过mediapla ...

  7. AS3.0 Vector的运用

    使用Vector类编程 一个array(数组)就像是把一套变量组织在一起的容器.单个数组可以含有许多不同的值.你可以储存和取得数组中的单个值(也就是数组elements(元素)).你也可以通过直接操作 ...

  8. ylbtech-LanguageSamples-OLEDB

    ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-OLEDB 1.A,示例(Sample) 返回顶部 “OLE DB”示例 本示例演示了如 ...

  9. iOS:操作队列实现多线程NSOperation

    NSOperation具体使用:直接继承NSObject 它的子类有:NSBlockOperation.NSInvocationOperation 还有一个必须的类,队列,用来装创建的线程 NSOpe ...

  10. PhpStorm 对 AngularJS 的支持

    非常喜爱用AngularJS来构建web应用程序的前端吗? PhpStorm 使得在其上进行 AngularJS 相关的工作同其它得到IDE支持的编程语言的工作一样容易! AD:51CTO首届中国AP ...