串口编程

朋友要求帮忙做个串口模块,让他的程序来收发串口消息。头一次做串口编程,留下脚印,总结一下这方面的知识。

电脑没有串口怎么办?

VSPD(Vitual Serial Port Driver)可以在WIN7上创建虚拟串口,非常方便。安装方式参考:Windows 7 虚拟串口 VSPD 6。安装完,利用串口调试助手,就可以看见COM口之间的通信了。

C#如何操作串口?

 System.IO.Ports 命名空间下的组件,用来操作串口。

using System;
using System.IO.Ports;

namespace SerialPortDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            const string com = "COM3";
            var port = new SerialPort(com, 9600, Parity.None, 8, StopBits.One)
                {
                    Handshake = Handshake.None
                };
            port.DataReceived += port_DataReceived;
            try
            {
                port.Open();
            }
            catch (System.IO.IOException ex)
            {
                Console.WriteLine(com + "端口打开失败,"+ex.Message);
                Console.ReadLine();
                return;
            }

            Console.WriteLine(com+"打开成功,目前处于监听状况...");

            while (true)
            {
                Console.WriteLine("要输出的内容:");
                var write = Console.ReadLine();
                port.WriteLine(write);
            }

            port.Close();
        }

        static void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            var port= (SerialPort)sender;
            var received = port.ReadExisting();

            Console.WriteLine(received);
        }
    }
}

 串口的硬件知识?

 在数据传输的时候,每个字节的数据通过单个的电缆线传输。包括开始位、数据、结束位。一旦开始位传出,后面就会传数据,可能是5、6、7、8位,就看你的设定了。发送和接收必须设定同样的波特率和数据位数。

串口通信最重要的参数是波特率数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配:

a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。
 
b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
 
c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
 
d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。
原文地址:https://www.cnblogs.com/andrewcn/p/3056487.html