第 5 章:接口与通信技术 —— 芯片的"感官"和"嘴巴"¶
场景: 智能家居中控需要连接各种设备——温度传感器、灯光控制器、显示屏、Wi-Fi 模块。每种设备用不同的"语言"和"线路"通信。GPIO、UART、SPI、I2C——这些就是嵌入式芯片的"感官"和"嘴巴"。
5.1 GPIO —— 通用输入输出¶
核心比喻:GPIO 就是中控主机的"开关量接口"
灯的开关只有两种状态:开或关。中控主机通过一根线控制——高电平(3.3V)灯亮,低电平(0V)灯灭。这就是 GPIO 最基本的功能。
GPIO 还可以读取输入——门磁传感器检测到门开了,给中控发一个高电平信号。
GPIO 工作模式¶
| 模式 | 方向 | 说明 | 典型应用 |
|---|---|---|---|
| 推挽输出 | 输出 | 能输出高低电平,驱动能力强 | 驱动 LED、继电器 |
| 开漏输出 | 输出 | 只能输出低电平,高电平需上拉电阻 | I2C 总线、电平转换 |
| 浮空输入 | 输入 | 高阻态,电平由外部决定 | 读取按键状态 |
| 上拉输入 | 输入 | 内部上拉电阻,默认高电平 | 按键检测(按下为低) |
| 下拉输入 | 输入 | 内部下拉电阻,默认低电平 | 特定逻辑检测 |
| 模拟输入 | 输入 | 连接到 ADC,读取模拟电压 | 读取模拟传感器 |
GPIO 寄存器¶
| 寄存器 | 作用 |
|---|---|
| 方向寄存器(DIR) | 设置引脚为输入或输出 |
| 数据寄存器(DATA) | 读写引脚电平 |
| 置位/复位寄存器(SET/CLR) | 原子操作设置/清除引脚 |
| 配置寄存器(CFG) | 配置引脚模式(推挽/开漏/上下拉等) |
5.2 UART —— 通用异步收发传输器¶
核心比喻:UART 就是两个人用对讲机通话
两个人各拿一个对讲机,约定好说话的速度(波特率)。你说一句,对方听一句——不需要额外的时钟线,双方按约定的节奏来。
UART 是最简单的串行通信方式,只需要两根线:TX(发送)和 RX(接收)。
UART 通信格式¶
空闲 ─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌──────
└──┘ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘
起 D0 D1 D2 D3 D4 D5 D6 D7 停 空
始 数据位(通常 8 位) 止 闲
位 位
| 参数 | 说明 | 常用值 |
|---|---|---|
| 波特率 | 每秒传输的比特数 | 9600、115200、921600 |
| 数据位 | 每个数据帧的数据位数 | 8(最常用) |
| 停止位 | 数据帧结束标志 | 1、1.5、2 |
| 校验位 | 奇偶校验,检测传输错误 | 无、奇校验、偶校验 |
UART 特点¶
| 特点 | 说明 |
|---|---|
| 连线 | TX + RX + GND(3 线) |
| 通信方式 | 全双工(可同时收发) |
| 速度 | 较低(通常 ≤ 1Mbps) |
| 距离 | 较短(通常 ≤ 15 米) |
| 同步方式 | 异步(无时钟线,靠波特率同步) |
5.3 SPI —— 串行外设接口¶
核心比喻:SPI 就是"指挥官对士兵的快速点名"
指挥官(主机)通过一条"点名线"(SS/CS)选中某个士兵(从机),然后通过"命令线"(MOSI)下达指令,士兵通过"汇报线"(MISO)回复。整个过程由指挥官的"哨声节奏"(SCLK 时钟)同步。
SPI 速度快、全双工,适合需要高速数据传输的场景(如显示屏、SD 卡)。
SPI 连线¶
主机(Master) 从机(Slave)
┌──────────┐ ┌──────────┐
│ SCLK │─────────────→│ SCLK │ ← 时钟线
│ MOSI │─────────────→│ MOSI │ ← 主机发、从机收
│ MISO │←─────────────│ MISO │ ← 从机发、主机收
│ SS/CS │─────────────→│ SS/CS │ ← 片选(选中哪个从机)
└──────────┘ └──────────┘
| 信号 | 全称 | 方向 | 作用 |
|---|---|---|---|
| SCLK | Serial Clock | 主机→从机 | 时钟信号,同步数据传输 |
| MOSI | Master Out Slave In | 主机→从机 | 主机发送数据 |
| MISO | Master In Slave Out | 从机→主机 | 从机发送数据 |
| SS/CS | Slave Select/Chip Select | 主机→从机 | 低电平有效,选中从机 |
SPI 特点¶
| 特点 | 说明 |
|---|---|
| 连线 | 4 线(每个从机额外一根 SS) |
| 通信方式 | 全双工 |
| 速度 | 快(可达数十 Mbps) |
| 距离 | 短(PCB 板级通信) |
| 同步方式 | 同步(有时钟线) |
| 多从机 | 支持(通过多个 SS 线) |
5.4 I2C —— 集成电路总线¶
核心比喻:I2C 就是"公司内部广播系统"
总经理(主机)通过广播系统喊话:"温度传感器,报告当前温度!"所有设备都听到了,但只有温度传感器回复。总经理通过"设备编号"(地址)来指定和谁对话。
I2C 只需要两根线(SDA 数据 + SCL 时钟),总线上可以挂多个设备,每个设备有唯一地址。
I2C 连线¶
主机(Master)
┌──────────┐
│ SDA │──────────┬──────────┬──────────┐
│ SCL │──────┬───┼────┬─────┼────┬─────┼───
└──────────┘ │ │ │ │ │ │
┌──┴───┴┐ ┌─┴─────┴┐ ┌─┴─────┴┐
│ 从机1 │ │ 从机2 │ │ 从机3 │
│ 0x48 │ │ 0x50 │ │ 0x68 │
└───────┘ └────────┘ └────────┘
| 信号 | 作用 |
|---|---|
| SDA | 串行数据线(双向,开漏输出,需上拉电阻) |
| SCL | 串行时钟线(主机控制) |
I2C 特点¶
| 特点 | 说明 |
|---|---|
| 连线 | 2 线(SDA + SCL) |
| 通信方式 | 半双工 |
| 速度 | 标准 100kbps、快速 400kbps、高速 3.4Mbps |
| 距离 | 短(PCB 板级通信) |
| 同步方式 | 同步(有时钟线) |
| 多从机 | 支持(通过 7 位/10 位地址区分) |
| 仲裁机制 | 多主机时通过仲裁决定总线控制权 |
5.5 UART vs SPI vs I2C 对比¶
| 对比维度 | UART | SPI | I2C |
|---|---|---|---|
| 线数 | 2~3 线(TX+RX+GND) | 4 线(SCLK+MOSI+MISO+SS) | 2 线(SDA+SCL) |
| 通信方式 | 全双工 | 全双工 | 半双工 |
| 速度 | 慢(≤ 1Mbps) | 快(数十 Mbps) | 中等(100k~3.4Mbps) |
| 距离 | 较长(~15m) | 短(板级) | 短(板级) |
| 同步方式 | 异步 | 同步 | 同步 |
| 多从机 | 不支持(点对点) | 支持(多 SS 线) | 支持(地址区分) |
| 复杂度 | 简单 | 中等 | 较复杂 |
| 典型应用 | GPS、蓝牙模块、调试串口 | LCD 屏、SD 卡、Flash | 传感器、EEPROM、RTC |
5.6 中断¶
核心比喻:中断就是"门铃响了"
中控主机正在更新屏幕显示(执行主程序)。突然门铃响了(外部中断)——有人按了门铃(传感器触发)。中控暂停屏幕更新,去处理门铃事件(执行中断服务程序),处理完回来继续更新屏幕。
中断让嵌入式系统能及时响应外部事件,而不需要不断轮询"有人按门铃吗?"
中断处理流程¶
| 概念 | 说明 |
|---|---|
| 中断向量表 | 存储各中断服务程序入口地址的表 |
| ISR | 中断服务程序(Interrupt Service Routine) |
| 中断优先级 | 高优先级中断可以抢占低优先级中断 |
| 中断嵌套 | 一个中断处理过程中响应更高优先级的中断 |
| NVIC | 嵌套向量中断控制器(ARM Cortex-M 的中断管理) |
5.7 常见考试题型¶
例题 1: I2C 总线需要( )根信号线。
A. 1 B. 2 C. 3 D. 4
查看答案
答案:B
I2C 只需要两根线:SDA(串行数据线)和 SCL(串行时钟线)。所有设备共享这两根线,通过地址区分。
例题 2: 以下通信接口中,属于异步通信的是( )。
A. SPI B. I2C C. UART D. 以上都是
查看答案
答案:C
UART 是异步通信,没有独立的时钟线,双方通过约定的波特率同步。SPI 和 I2C 都有时钟线(SCLK/SCL),属于同步通信。
例题 3: 以下关于 SPI 和 I2C 的描述,正确的是( )。
A. SPI 只需要 2 根线 B. I2C 支持全双工通信 C. SPI 速度通常比 I2C 快 D. I2C 不支持多从机
查看答案
答案:C
SPI 速度通常比 I2C 快(数十 Mbps vs 数百 kbps)。SPI 需要 4 根线,I2C 是半双工通信,I2C 通过地址支持多从机。
要点总结¶
- GPIO:通用输入输出,控制引脚高低电平
- UART:异步串行,2 线(TX+RX),速度慢但简单
- SPI:同步串行,4 线,全双工,速度快
- I2C:同步串行,2 线,半双工,支持多设备(地址区分)
- 中断:暂停当前任务处理紧急事件,处理完返回
课后练习¶
-
接口选型 :以下场景分别适合使用哪种通信接口?为什么?
- 连接 GPS 模块(发送 NMEA 文本数据)
- 连接 TFT LCD 显示屏(需要高速传输图像数据)
- 连接多个温度/湿度传感器
-
中断分析 :描述从中断触发到返回主程序的完整处理流程。
-
真题演练 :UART 通信中,收发双方需要约定相同的( )才能正确通信。
下一章预告: 单个设备搞定了,但智能家居需要联网——Wi-Fi、蓝牙、Zigbee、MQTT 协议。第 6 章见。