C#串口介绍及串口通信程序设计实现(附程序分享)

一、简介

串行接口简称串口(Serial Interface),也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。

C#串口介绍及串口通信程序设计实现(附程序分享)

9位针脚功能对应如下:

  1.  载波检测(DCD)
  2.  接受数据(RXD)
  3.  发出数据(TXD)
  4.  数据终端准备好(DTR)
  5.  信号地线(SG)
  6.  数据准备好(DSR)
  7.  请求发送(RTS)
  8.  清除发送(CTS)
  9.  振铃指示(RI)

二、串口应用

工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串口通信来实现!比如国家电表的通信接口就是串口通信。上述9针脚接口中,我们一般只接出RXD TXD两针,外加GND,即可实现两台设备之间的串口通信。

C#串口介绍及串口通信程序设计实现(附程序分享)

三、串口通信协议

C#串口介绍及串口通信程序设计实现(附程序分享)

空闲位:

UART协议规定,当总线处于空闲状态时信号线的状态为‘1’即高电平,表示当前线路上没有数据传输。

起始位:

每开始一次通信时发送方先发出一个逻辑”0”的信号(低电平),表示传输字符的开始。因为总线空闲时为高电平所以开始一次通信时先发送一个明显区别于空闲状态的信号即低电平。

数据位:

起始位之后就是我们所要传输的数据,数据位可以是5、6、7、8,9位等,构成一个字符(一般都是8位)。如ASCII码(7位),扩展BCD码(8位)。先发送最低位,最后发送最高位,使用低电平表示‘0’高电平表示‘1’完成数据位的传输。

奇偶校验位:

数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。校验位其实是调整个数,串口校验分几种方式:

  • 1、无校验(no parity)。
  • 2、奇校验(odd parity):如果数据位中“1”的数目是偶数,则校验位为“1”,如果“1”的数目是奇数,校验位为“0”。
  • 3、偶校验(even parity):如果数据为中“1”的数目是偶数,则校验位为“0”,如果为奇数,校验位为“1”。
  • 4、mark parity:校验位始终为1(不常用)。
  • 5、parity:校验位始终为0(不常用)。

停止位:

它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备之间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟的机会。停止位个数越多,数据传输越稳定,但是数据传输速度也越慢。

波特率:

数据传送速率用波特率来表示,单位bps(bits per second),即每秒钟传送的二进制位数。例如数据传送速率为120字符/秒,而每一个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),则其传送的波特率为10×120=1200字符/秒=1200波特。常见的波特率9600bps、115200bps等等,其他标准的波特率是1200,2400,4800,19200,38400,57600。举个例子,如果串口波特率设置为9600bps,那么传输一个比特需要的时间是1/9600≈104.2us。

四、C#程序设计

  1. 首先在VS中建立Windows窗口程序;
  2. 串口通信程序中首先设置串口相关必要信息,包括:串口号,波特率,数据位,停止位,校验位等,以及接受与发送的数据量Rx与Tx。基本逻辑是:打开软件后,首先获取现在存在的串口号,添加至串口号选择栏的下拉项目中:
rivate void comboBox_Port_Update()
{
RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm"); //需要调用Win32
if(keyCom != null)
{
string[] sSubKeys = keyCom.GetValueNames();
foreach(string sName in sSubKeys )
{
string sValue = (string)keyCom.GetValue(sName);
comboBox1.Items.Add(sValue );
}
}
}

3. 添加发送和接收项目,并且设置发送按钮与清除接收消息框的清除按钮:

C#串口介绍及串口通信程序设计实现(附程序分享)

4. 测试各项功能,以及调试bug。需要考虑这些情况:

(1)串口还没打开就发送数据,需要弹出警告框提示串口还未打开:

C#串口介绍及串口通信程序设计实现(附程序分享)

(2)发送栏的参数还没设置完整,就点击发送按钮:

 

C#串口介绍及串口通信程序设计实现(附程序分享)

还有一些设计交互逻辑,在慢慢测试中就会发现,在此不再一一列举。有需要程序源代码的同学私信我,或者不介意的话可以加微信storm22交流。

上位机源码GitHub:https://github.com/chengoes/SerialPort

原创文章,作者:chengoes,如若转载,请注明出处:http://www.allchiphome.com/programm/csharp-serialport

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注