朋友要求帮忙做个串口模块,让他的程序来收发串口消息。头一次做串口编程,留下脚印,总结一下这方面的知识。
电脑没有串口怎么办?
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位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。