跳转至

第 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)
恢复现场(寄存器出栈)
返回主程序继续执行
概念 说明
中断向量表 存储各中断服务程序入口地址的表
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 线,半双工,支持多设备(地址区分)
  • 中断:暂停当前任务处理紧急事件,处理完返回

课后练习

  1. 接口选型 :以下场景分别适合使用哪种通信接口?为什么?

    • 连接 GPS 模块(发送 NMEA 文本数据)
    • 连接 TFT LCD 显示屏(需要高速传输图像数据)
    • 连接多个温度/湿度传感器
  2. 中断分析 :描述从中断触发到返回主程序的完整处理流程。

  3. 真题演练 :UART 通信中,收发双方需要约定相同的(  )才能正确通信。


下一章预告: 单个设备搞定了,但智能家居需要联网——Wi-Fi、蓝牙、Zigbee、MQTT 协议。第 6 章见。

继续第 6 章:嵌入式网络与物联网 →