背景

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 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);
}
}

至此记录完毕。

参考链接

记录时间: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. 【剑指offer】顺时针打印数组

    顺时针打印数组 题意 例如我们有一个二维数组,如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 现在要按照顺时针打印出来,结果应该为: 1 2 3 4 8 12 16 ...

  2. 【图论】Popular Cows

    [POJ2186]Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 34752   Accepted: ...

  3. 【FFT】OpenJ_POJ - C17H - Reverse K-th Problem

    对每个位置i处理出以其为结尾,且比a(i)大的数有j个的前缀个数,记成一个数组l:同理,处理出以其为开头,且比a(i)大的数有j个的后缀的个数,记成一个数组r. 整个序列中比a(i)大的数的个数的数组 ...

  4. 【后缀自动机】hihocoder1449 后缀自动机三·重复旋律6

    解题方法提示 小Hi:上次我们已经学习了后缀自动机了,今天我们再来解决一个用到后缀自动机的问题. 小Ho:好!那我们开始吧! 小Hi:现在我们要对K=1..length(S)求出所有长度为K的子串中出 ...

  5. hibernate双向ManyToMany映射

    工作需要一个双向多对多映射,照着李刚的书做了映射,碰到了一些问题,现就问题及解决方案进行总结归纳. 1.首先奉上最初代码 Person5.java @Entity @Table(name = &quo ...

  6. [AGC019E]Shuffle and Swap

    [AGC019E]Shuffle and Swap 题目大意: 给出两个长度为\(n(n\le10000)\)的\(01\)串\(A_{1\sim n}\)和\(B_{1\sim n}\).两个串均有 ...

  7. Perl正则表达式

    perl正则表达式就是通过一串特别设计的字符串,可以按照我们的需求匹配.替换.转化目标字符串.本文主要是对一些常用的正则表达以及语法的总结以及举例,供广大喜爱Perl的同学交流学习. 操作符: =~ ...

  8. lightoj 1052 - String Growth & uva 12045 - Fun with Strings 矩阵

    思路:很容易发现规律,数列和Fib数列一样的. 记开始的时候啊a的个数为Y,b的个数为X.建立矩阵. 代码如下: #include<iostream> #include<cstdio ...

  9. HDU 5299 Circles Game 博弈论 暴力

    Circles Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5299 Description There are n circles on ...

  10. uboot中的快捷菜单的制作说明

    转:http://blog.chinaunix.net/uid-22030783-id-366971.html 在uboot中加入快捷操作菜单的方法非常简单,在论坛发布的uboot201003V1.1 ...