串口通讯简介

串口通讯是一种通过串行接口在设备之间传输数据的方法。它按照位(bit)的方式发送数据,每次只传送一个比特的数据。虽然速度相对较慢,但由于其实现简单、成本低,在许多应用中仍然非常常见。

作用:主要用于两个设备间的点对点通信,如计算机与调制解调器、传感器或其他嵌入式系统之间的数据交换。

关键术语解释

  • 波特率(Baud Rate):指每秒钟可以传输的最大符号数(通常等于比特数),单位为bps(bits per second)。例如9600 bps表示每秒最多可传输9600个比特。

  • 停止位:用于标记一个字节传输结束的信号。一般有1位或2位停止位。

  • 校验位:为了检测传输过程中可能出现的错误而设置的额外位。常见的有无校验、奇校验和偶校验。

  • 串行 vs 并行:串行是一次传输一位数据;并行则一次传输多位数据(如8位同时传输)。

  • 异步 vs 同步:异步通信不需要同步时钟信号,依赖于起始位和停止位来识别数据帧;同步通信则需要时钟信号以保持发送方和接收方同步。

  • 双工

    • 半双工:同一时间只能进行单向通信。
    • 全双工:可以同时双向通信。
  • 普通串口、RS232、RS485

    • RS232:早期标准,支持点对点通信,传输距离短。
    • RS485:改进版本,支持多点通信,传输距离更长。

使用C#进行串口通信的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.IO.Ports;

class Program
{
static void Main()
{
// 创建SerialPort对象,并配置基本参数
SerialPort mySerialPort = new SerialPort("COM1");

mySerialPort.BaudRate = 9600; // 设置波特率为9600
mySerialPort.Parity = Parity.None; // 无校验
mySerialPort.StopBits = StopBits.One; // 1位停止位
mySerialPort.DataBits = 8; // 数据位为8
mySerialPort.Handshake = Handshake.None; // 不使用握手协议

// 注册DataReceived事件处理程序
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

// 打开串口
mySerialPort.Open();

// 发送数据
mySerialPort.WriteLine("Hello, World!");

Console.WriteLine("Press any key to continue...");
Console.ReadKey();

// 关闭串口
mySerialPort.Close();
}

private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.Write(indata);
}
}

解释

  • 在这个例子中,我们创建了一个SerialPort对象,并设置了必要的参数,比如波特率、校验位等。
  • DataReceived事件被用来监听来自串口的数据,并在数据到达时触发DataReceivedHandler函数来处理这些数据。
  • 我们通过WriteLine方法向串口写入数据(”Hello, World!”),并通过读取输入流来获取返回的数据。

这样,你就可以用C#语言轻松地实现串口通信了,无论是开发物联网(IoT)设备还是其他需要串口交互的应用场景都非常有用。希望这能帮助你更好地理解串口通讯及其相关概念!