串口通信

Posted maoshuyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串口通信相关的知识,希望对你有一定的参考价值。

SerialPort类

SerialPort sp = new SerialPort("COM1"); 或者 SerialPort sp = new SerialPort();sp.PortName = "COM1";

这两种写法是等效的;获得串口“COM1”的操作权,就是创建一个SerialPort对象,然后对象的属性PortName初始化为指定的串口名“COM1”,即可用该对象操作串口“COM1”,如:设置串口的通信参数,打开串口,发送数据,接收数据,关闭串口等;

SerialPort类的重要属性:

(1)PortName   

    赋予哪个串口名字,就是操作哪个串口;

(2)DataBits   

      数据位的位数,有7,8,9三种情况,计算机编程语言认为8bit为一个字节,所以一般我们用8bit做为一帧数据帧的数据部分,这样数据帧到达接收方,接收方解析一个数据帧提取出数据位即是一个字节;

(3)Parity       

     奇偶校验的方式,Parity.Even 奇校验;Parity.Odd 偶校验;Parity.None 不校验;不校验数据帧,能增加传输数据的效率,但是通信的可靠性降低;

(4)StopBits     

    停止位的位数,StopBits.One    StopBits.OnePointFive    Two    指的是停止位持续几个电平;

(5)BaudRate   

    波特率,串口通信的速率,值越大串口传输数据越快;如果是异步串口通信的话,二者的波特率应该尽可能无限接近,允许有细微误差;同步串口通信的话,双方一般使用同一个时钟,保证通信双方的波特率严格一致;

 

检查机器上有无串口,串口的数量,具体串口名字

string[] GetPortName()
//返回的数组的Length ==0,表示无串口
//Length > 0时候,表示有串口,Length的大小就是串口的数量
//字符串数组的每一个元素就是串口的名字

打开串口和关闭串口

sp.IsOpen
//指示串口是否处于打开状态,true打开,false未打开;打开已经打开过的串口会抛出异常;
sp.Open()
//打开串口
sp.Close()
//关闭串口

 向串口写数据

public void Write(string)   //发送字符串
//假设sp的Encoding属性是ASCII,写入字符串“abc”,那么实际写入发送缓存3个字节;
//如果Encoding属性是Unicode,那么实际写入发送缓存6个字节;

public void Write(byte[],int32,int32) //发送字节数组
//第一个参数是函数外已经创建好的字节数组的引用,第二个参数是从字节数组的第几个字节开始写,一般为0,第三个参数表示本次要写入几个字节;

public void Write(char[],int32,int32)  //发送字符数组
//用法参考上述两个重载;特别说明,Encoding属性同样影响写入发送缓存的字节数量,不同的编码方式,虽然发送的是同一个字符数组,但是实际上写入发送缓存的字节数量不同!

public void WriteLine(string)  //发送一行字符串
//发送完string,紧接着向发送缓存写入一个NewLine字符串;

从串口读数据

 读取数据可比发送数据复杂多了!

接收方接收到的数据都在接收缓存中,

以上是关于串口通信的主要内容,如果未能解决你的问题,请参考以下文章

51单片机串口通讯

串口通信接收区出现多余的乱码怎么解决

串口通信代码

Arduino和C51之串口通信

51单片机做串口通信接收缓存区没反应

c#串口通信类代码可以直接调用