嵌入式2026-07-17

单片机的通讯

#单片机#通信协议
1. USART(通用同步异步收发器)

别称:串口、UART(异步模式时)。 核心特点:点对点、全双工、异步/同步。

  • 怎么连:只需 TX(发)、RX(收)、GND(地) 三根线。TX接对方的RX。
  • 怎么传:没有时钟线,双方必须提前约定好波特率(如9600、115200)。数据以“帧”为单位,包含起始位、数据位、校验位、停止位。
  • 优缺点:结构简单,线少,但速度较慢(通常≤1.5Mbps),且只能一对一。
  • 用在哪:调试打印(printf)、GPS模块、蓝牙/WiFi模组通信、老旧设备对接。
  • 新手注意:电平逻辑!TTL电平(0V/3.3V)和RS232电平(±12V)不通用,需用MAX3232芯片转换。

2. I2C(集成电路总线)

核心特点:多主多从、半双工、两根线。

  • 怎么连:SDA(数据) 和 SCL(时钟),两根线可挂载最多128个设备,通过7位地址区分。
  • 怎么传:所有设备开漏输出,必须接上拉电阻。通信以起始条件(SCL高时SDA下拉)开始,以停止条件结束。每个字节后,接收方需回复 ACK(应答) 位。
  • 优缺点:极其省引脚,支持一主多从。但速度较慢(标准100kbps,快速400kbps,高速3.4Mbps),且受总线电容限制,不宜长距离。
  • 用在哪:传感器(MPU6050陀螺仪、温湿度)、EEPROM存储、OLED屏幕()集成上拉电阻、触摸芯片。
  • 新手注意:时钟拉伸(从机拉低SCL请求等待)是常见卡死原因,初始化时务必检查超时处理。

3. SPI(串行外设接口)

核心特点:一主多从、全双工、高速、四根线。

  • 怎么连:SCK(时钟)、MOSI(主出从入)、MISO(主入从出)、NSS/CS(片选)。每增加一个从机,就多一根CS线。
  • 怎么传:由主机产生时钟,同时在MOSI和MISO线上收发数据,是真正的全双工。通过配置 CPOL(时钟极性) 和 CPHA(时钟相位) 有4种工作模式。
  • 优缺点:速度极快(可达几十Mbps),传输稳定无协议开销。但引脚多,且无应答机制,主机只管发,不管从机是否收到。
  • 用在哪:SD卡、TFT彩屏、高速ADC/DAC、Flash存储器(W25QXX)、射频芯片(NRF24L01)。
  • 新手注意:模式匹配!主从机的CPOL/CPHA必须一致,否则读出的全是乱码。

4. CAN(控制器局域网)

核心特点:多主竞争、差分信号、高可靠、远距离。

  • 怎么连:CAN_H 和 CAN_L 两根差分线,需接120Ω终端电阻。不依赖地址,靠 ID优先级(越小越高) 仲裁。
  • 怎么传:数据以“帧”发送,包含ID、数据长度、0~8字节数据、CRC校验。若两个节点同时发,非破坏性仲裁:高优先级ID继续发,低优先级自动退出发送。
  • 优缺点:抗干扰强(差分),通信距离可达1km(5kbps),支持多主机。但协议复杂,每帧最多只能带8字节数据。
  • 用在哪:汽车电子(ECU、BMS电池管理)、工业现场(PLC通信、电梯控制)、机器人关节通信。
  • 新手注意:必须用 CAN收发器芯片(如TJA1050)将单片机的TTL转成差分信号,不能直连。

5. USB(通用串行总线)

核心特点:主从结构、热插拔、复杂协议栈。

  • 怎么连:D+、D- 差分线,加上VBUS(5V)和GND。设备通过D+或D-上的上拉电阻告知主机速度(低速1.5Mbps、全速12Mbps、高速480Mbps)。
  • 怎么传:基于令牌包-数据包-握手包的事务传输。有四种传输类型:控制(枚举配置)、批量(U盘大文件)、中断(键盘鼠标,定期查询)、等时(音频视频,无重传)。
  • 优缺点:通用性极强,供电+通信一体。但协议极其复杂,单片机需自带USB外设(如STM32F103)且需移植协议栈(如ST的USB库或CherryUSB)。
  • 用在哪:与PC通信(虚拟串口)、U盘读写(HOST模式)、鼠标键盘(HID设备)、USB烧录(DFU)。
  • 新手注意:不要尝试用IO模拟USB!必须使用带USB控制器的MCU。开发时务必注意 D+/D- 的PCB走线阻抗(90Ω差分),否则高速模式会失败。

对比总结

协议引脚数速度通信距离总线拓扑选型黄金法则
USART3慢 (≤1.5M)短 (1-2m)点对点调试和对接无线模块,首选。
I2C2较慢 (≤3.4M)极短 (板内)多从机挂载多个低速传感器,省引脚。
SPI4+极快 (≤50M)极短 (板内)一主多从需要高速吞吐(屏幕/SD卡),必选。
CAN2中 (≤1M)极远 (≤1km)多主机工业或汽车环境,抗干扰要强。
USB2极快 (≤480M)短 (≤5m)主从必须和PC或手机交互数据。