Update README.md

This commit is contained in:
Natsume1710
2025-06-28 14:45:58 +08:00
committed by GitHub
parent f386f0f5bb
commit b0b5c9592a
+93 -17
View File
@@ -9,25 +9,101 @@
## 串口通信与Socket通信
### 串口通信
- 串口基础:波特率、校验位、停止位、数据位
- 应用:模块通信、调试信息输出
- 中断方式与 DMA 模式接收
```c
// 基本 UART 初始化
USART1->BRR = 0x1A1; // 设置波特率
USART1->CR1 |= USART_CR1_TE | USART_CR1_RE | USART_CR1_UE; // 使能收发
```
#### 1. 什么是串口通信?
**串口通信**是一种历史悠久且广泛使用的**点对点、串行、异步**通信方式。它指的是数据在通信线上**一位一位地**顺序传输。最常见的串口标准是 **RS-232**,但在嵌入式系统中,更多使用 **TTL 电平的 UART** (Universal Asynchronous Receiver/Transmitter) 接口。
它的特点是**简单、直接**,常用于设备间的短距离连接,比如单片机与电脑、两个单片机之间、或者连接一些外部模块(GPS、蓝牙模块、传感器等)。
#### 2. 核心特点
* **串行传输:** 数据一位接一位地在线上传输,而不是并行传输多位。这减少了传输线数量,降低了成本,但在相同频率下速度比并行慢。
* **异步通信:** 发送方和接收方不需要共用同一个时钟信号。双方通过约定好的**波特率**(每秒传输的位数)来同步数据。每个数据帧通常包含起始位、数据位、校验位和停止位。
* **点对点:** 通常只连接两个设备进行通信。
* **硬件接口:** 涉及到物理引脚连接,如 RX (接收数据)、TX (发送数据)、GND (地线) 等。
* **传输距离:** 相对较短,RS-232 理论上是 15 米,但通过 RS-485 等差分信号标准可以达到更远距离。
#### 3. 工作原理
在异步串口通信中,数据以**帧**的形式传输:
1. **空闲状态:** 数据线通常保持在高电平。
2. **起始位:** 发送方发送一个低电平信号,表示一个数据帧的开始。
3. **数据位:** 紧接着是 5 到 9 位的数据,通常是 8 位。先发低位。
4. **校验位(可选):** 用于检测数据传输中是否出错(奇校验或偶校验)。
5. **停止位:** 发送一个高电平信号,表示一个数据帧的结束。可以是一位、一位半或两位。
6. **空闲状态:** 信号线回到高电平,等待下一个数据帧。
#### 4. 常见应用
* **嵌入式设备调试和数据传输:** 单片机与上位机(PC)之间传输调试信息、配置参数、传感器数据等。
* **工业控制:** 连接 PLC、仪器仪表、HMI (人机界面) 等。
* **GPS、蓝牙、WiFi 模块:** 许多这些模块通过串口与主控器进行数据交互。
* **传统外设连接:** 早期鼠标、调制解调器等。
#### 5. 优点与缺点
* **优点:** 简单、成本低、实现容易,对于资源有限的设备非常适用。
* **缺点:** 传输速度相对较慢(特别是与以太网相比)、传输距离有限、点对点通信不适合多设备组网。
### Socket网络通信
- Socket 基础:TCP/UDP 区别、连接建立过程
- 在 ESP32 等模块中使用 LWIP 实现 TCP 客户端/服务器
```c
// TCP 客户端基础逻辑 (伪代码)
socket();
connect();
send();
recv();
```
#### 1. 什么是 Socket 通信?
**Socket (套接字)** 是**网络通信的抽象层**,是**应用层与传输层之间**的接口,它使得应用程序能够通过网络进行数据传输。你可以把 Socket 理解为**连接网络两端进程的“插座”**。通过 Socket,两个独立的进程(可以在同一台机器上,也可以在不同机器上)可以在网络上相互发送和接收数据。
Socket 通信是构建大多数网络应用(如网页浏览、文件传输、即时通讯、网络游戏)的基础。它通常基于 **TCP/IP 协议栈**。
#### 2. 核心特点
* **网络化:** 基于网络协议(如 TCP/IP),可以在全球范围内进行通信。
* **全双工:** 通常情况下,两端可以同时发送和接收数据。
* **面向连接或无连接:**
* **TCP Socket (流套接字):** **面向连接、可靠、基于字节流**。在数据传输前需要建立连接(三次握手),数据传输有顺序、无丢失、无重复保证。
* **UDP Socket (数据报套接字):** **无连接、不可靠、基于数据报**。无需建立连接即可发送数据,数据可能丢失、乱序、重复。
* **IP 地址和端口号:** Socket 通信通过 **IP 地址** 确定目标主机,通过 **端口号** 确定目标主机上的具体应用程序进程。
* **客户端/服务器模式:** 大多数 Socket 通信遵循客户端/服务器模式。服务器程序在特定端口监听连接请求,客户端程序连接到服务器的特定端口发送请求。
#### 3. 工作原理 (以 TCP Socket 为例)
1. **服务器端:**
* **`socket()`:** 创建一个 Socket。
* **`bind()`:** 将 Socket 绑定到一个本地 IP 地址和端口号上。
* **`listen()`:** 使 Socket 进入监听状态,等待客户端连接。
* **`accept()`:** 阻塞等待客户端连接。当有客户端连接时,接受连接并返回一个新的 Socket,用于与该客户端通信。
* **`recv()/send()`:** 通过接受的 Socket 与客户端收发数据。
* **`close()`:** 关闭 Socket。
2. **客户端:**
* **`socket()`:** 创建一个 Socket。
* **`connect()`:** 连接到服务器的 IP 地址和端口号。
* **`send()/recv()`:** 与服务器收发数据。
* **`close()`:** 关闭 Socket。
#### 4. 常见应用
* **Web 服务器:** HTTP 协议就是基于 TCP Socket 实现的。
* **文件传输:** FTP (文件传输协议) 也是基于 TCP Socket。
* **即时通讯:** QQ、微信等聊天软件底层通常使用 Socket 进行通信。
* **网络游戏:** 大多数在线游戏使用 Socket 进行数据交互。
* **物联网云平台通信:** 许多物联网设备(如智能家居网关、工业控制器)通过 Socket 连接到云平台进行数据上传和指令接收(如 MQTT 协议底层就运行在 TCP Socket 上)。
#### 5. 优点与缺点
* **优点:** 跨网络通信能力强、支持复杂的网络应用、可靠性高(TCP)、适合大数据量传输。
* **缺点:** 相对复杂,需要理解网络协议栈;资源开销相对较大(TCP 连接维护开销)。
### 串口通信 vs Socket 通信:对比总结
| 特性 | 串口通信 (UART/RS-232) | Socket 通信 (TCP/UDP) |
| :----------- | :------------------------------------- | :------------------------------------------------ |
| **通信范围** | **局域性** (通常是设备内部或短距离有线连接) | **广域性** (可通过网络在不同设备、服务器之间通信) |
| **传输方式** | **物理层/数据链路层** (硬件直接控制) | **网络层/传输层之上** (通过操作系统提供的接口) |
| **协议栈** | 通常无复杂协议栈,仅定义物理电平和数据帧格式 | 基于 **TCP/IP 协议栈** (IP, TCP, UDP等) |
| **连接对象** | **物理设备** (点对点) | **网络进程** (通过 IP 地址和端口号识别) |
| **抽象程度** | **低** (直接操作硬件寄存器或库) | **高** (抽象为文件描述符,通过系统调用操作) |
| **复杂性** | **相对简单** | **相对复杂** (需理解网络编程和协议) |
| **应用场景** | 调试、嵌入式设备间通信、简单传感器连接 | 互联网应用、物联网云连接、复杂网络数据传输 |
---