.NET Compact Framework下的串口通信
在Wince和Windows Mobile下,很多设备以串口(Serial Port/Com Port)的方式提供访问接口,例如可以通过串口访问GPS的receiver,从而接收NMEA Data。
在CF.NET2.0开始,MS把串口操作封装了到System.IO.Ports.SerialPort里面,大大简便了对串口的操作,不再需要P/Invoke就可以直接操作串口。
下面展现两个串口通信类,一个负责发生,一个负责接收,两个类分别在不要的设备上运行。
{
private readonly System.IO.Ports.SerialPort serialPort;
public ReceiverPort()
{
serialPort = new System.IO.Ports.SerialPort("COM1", 4800,
System.IO.Ports.Parity.None, 8,
System.IO.Ports.StopBits.One);
serialPort.Handshake = System.IO.Ports.Handshake.None;
try
{
serialPort.DataReceived += new
System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort_DataReceived);
serialPort.Open();
if (serialPort.IsOpen)
{
Console.WriteLine("Open the serial port successful");
}
else
{
Console.WriteLine("Fail to open the serial port");
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public void Dispose()
{
if (serialPort.IsOpen)
{
serialPort.Close();
}
serialPort.Dispose();
}
private void serialPort_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e)
{
Console.WriteLine("RECEIVED:" + serialPort.ReadLine());
}
}
public class SenderPort : IDisposable
{
private readonly System.IO.Ports.SerialPort serialPort;
public SenderPort()
{
serialPort = new System.IO.Ports.SerialPort("COM1", 4800,
System.IO.Ports.Parity.None, 8,
System.IO.Ports.StopBits.One);
serialPort.Handshake = System.IO.Ports.Handshake.None;
try
{
serialPort.Open();
if (serialPort.IsOpen)
{
Console.WriteLine("Open the serial port successful");
}
else
{
Console.WriteLine("Fail to open the serial port");
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public void Dispose()
{
if (serialPort.IsOpen)
{
serialPort.Close();
}
serialPort.Dispose();
}
public bool Send(string str)
{
try
{
if (serialPort.IsOpen)
{
Console.WriteLine("SENT:" + str);
serialPort.WriteLine(str + "\r");
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
}
进行串口通信,需要通信双方执行共同的协议,所谓共同的协议就是通信的参数相同,通信参数包括BaudRate,Parity,DataBits,StopBits和Handshake。比较关键的是波特率(BaudRate),通信想法BaudRate应该一样。
SerialPort的构造函数第一个参数是端口号,端口号一般由'COM'加上数字组成,例如例子上的COM1。
所有的串口操作都是基于logic serial port(逻辑串口),并不是physical serial port(物理串口),逻辑串口到物理串口是有驱动程序进行映射到,也就是在使用的设备上安装相应的驱动程序,这个逻辑串口就存在,对这个逻辑串口操作并不是说可以正常通信,还需要检查硬件连接。对逻辑串口操作有一个好处是同样的程序可以对物理的串口或者虚拟的串口进行操作。
在ReceiverPort需要注册一个接收函数serialPort_DataReceived到delegate,这样当接收到数据时就回调这个处理函数。
由于串口操作是唯一,排他和独占的操作,因此使用后最好Dispose。
参考文献
SerialPort Class
转载于:https://www.cnblogs.com/procoder/archive/2009/04/07/1430871.html
.NET Compact Framework下的串口通信相关推荐
- .NET Compact Framework下的蓝牙开发
蓝牙的应用十分广泛,基于Bluetooth的通信程序开发主要有以下几个步骤: 服务端 * 设置本设备为可发现. * 公开服务给其他Bluetooth设备访问. * 接受其他Bluetooth设备的链接 ...
- .NET Compact Framework下的进程间通信之Windows Message
在Wince和Windows Moblie 下的进程间通信可以由以下几种技术实现. 1. Windows Message 2. Point-to-Point Message Queues 3. MSM ...
- .NET Compact Framework下SQL CE的使用
在Wince和Windows Mobile下最常用的数据库为SQL CE,SQL CE也曾经叫做SQL Server for Windows CE和SQL Server Mobile Edition, ...
- .NET Compact Framework下的单元测试
在 Wince和Windows Mobile下native C++的单元测试 里讲述了在Wince和Windows Mobile下native C++进行单元测试的方法,这篇将会讲述.NET Comp ...
- Windows Mobile和Wince(Windows Embedded CE )下使用.NET Compact Framework下注册表导出工具的开发...
简介 本文讲述了.NET Compact Framework下的注册表开发的基本概念,介绍在Windows Mobile和Wince下操作注册表的工具,同时使用C#实现了一个注册表导出工具. 背景 W ...
- STM32串口通信代码、ASCII码、XU4串口通信,printf只会转换为无符号类型,linux下的串口通信程序
1.其里面的的通信协议是是自己定的,这里 是检测到数据的结尾是以0x0d.0x0a结尾,则表示接受的数据完成了,这个数据是我想要的,这样子就不会出现一些错乱的数据信息.其中的0x8000.0x4000 ...
- Linux操作系统下的串口通信
1 Linux操作系统下的串口通信学习笔记 一.什么是串口通信 串口通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送.使用 串口通信时,发送和接收到的每一个字符实际上都是一次一 ...
- 基于Verilog下的串口通信实验_Devin_新浪博客
串口通信是目前比较重要的一种通信方式,主要是用于计算机和外部的通信.首先简单的介绍一下串口通信的原理: 串口用于ASCII码字符的传输.通信使用3根线完成:(1)地线,(2)发送,(3)接收.由于串口 ...
- linux下的串口通信
一.串口的基本原理 1 串口通讯 串口通讯(Serial Communication),是指外设和计算机间,通过数据信号线.地线等,按位进行传输数据的一种通讯方式. 串口是一种接口标准,它规定 ...
最新文章
- foundation框架之反射机制
- html与js加载的顺序问题defer 代表延迟(加载完所有html在执行js)
- Windows服务卸载之后未重启机器之前再安装问题
- matplotlib安装失败_Python | 安装中遇到“0x80072f7d 未指定的错误”
- 微软Code Hunt答案(00-05)——沉迷娱乐的我
- 大学生必犯的N大错误(开篇)
- 人脸对齐(十七)--DenseReg
- layui 复选框checked获取值和赋值
- C++ 时间差的计算方式
- 计算机控制环境下审计风险研究,计算机审计风险研究
- 2018入门级手机VR眼镜对比区别:ugp vr眼镜怎么样?目前哪个vr眼镜牌子效果更好,vr眼镜选哪款?
- css动画(transition,translate,rotate,scale)
- 小菊的语义分割1——语义分割科普Semantic Segmentation
- 单价飙升至3299!是飞天茅台的两倍,茅台的葡萄酒果真有酱香味?
- springboot-admin 整合nacos处理含有context-path的应用问题
- 【linux】shell编程 脚本语法
- 【毕业设计源码】基于微信小程序的查寝系统的设计与实现
- java中的常用类-1
- 小米5 android 7.0 rom,小米5升级安卓7.0 小米5刷安卓7.0教程
- php consult用法,YanPHP: YanPHP——一个为API开发而设计的高性能轻量级框架
热门文章
- 如何写出高性能的SQL
- 【splishsplash】PBD探究
- 前端利用canvas实现手写板
- 全新TFN FGT720A扫频仪
- 脑电分析系列[MNE-Python-21]| Python协方差矩阵处理脑电数据
- 大脑中的结构连接、功能连接和有效连接
- Python基础知识(二进制与字符编码、Python中的标识符和保留字、变量的定义和使用、变量的多次赋值)
- 返回参数数字的千分位分隔符字符串
- citus 之六 多表join
- 【原创作品】爱博QQ邮件搜索机 注册机 增强补丁V2.2 (包括试用版邮箱导出补丁) 支持最新版本的 Ver 2.5.2 Build 036