首页/外设速查/SPI
🔷

SPI 同步串行外设

通信外设
最快最常用的板内同步总线:4根线全双工,Flash/显示屏/传感器首选。
🧩 核心原理
📈 时序 / 工作过程图
SPI 时序(模式0:CPOL=0, CPHA=0)CS低有效片选 → SCK上升沿主机输出/下降沿采样 → 全双工同时收发CSSCKMOSID7D6D5D4D3D2D1D0
⚙️ 配置 / 使用要点
  1. 使能 SPI + GPIO 复用时钟,配置速率/模式
  2. 配置 CPOL/CPHA/位序(MSB)/NSS
  3. HAL_SPI_TransmitReceive 收发
  4. 高速场景用 DMA + 中断
🛠️ 项目示例
SPI 读 W25Q64 Flash(读 ID 指令 0x9F)
// SPI1: PA5 SCK / PA7 MOSI / PA6 MISO / PA4 CS
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);  // CS=1 空闲
uint8_t tx[4] = {0x9F, 0, 0, 0};   // 读JEDEC ID
uint8_t rx[4] = {0};
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // CS=0 选中
HAL_SPI_TransmitReceive(&hspi1, tx, rx, 4, 100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);   // CS=1 释放
// rx[1..3] = 厂商/容量/型号 如 EF 40 17 → W25Q64
❓ 面试高频
SPI和UART的本质区别?
SPI有独立时钟线同步采样、速率高、全双工4线、一主多从需片选;UART异步无时钟、靠波特率、2线点对点
四种模式怎么记?
CPOL=时钟空闲电平(0低/1高);CPHA=采样沿(0前沿/1后沿)。主从模式不一致就读错数据
为什么SPI可以比I2C快?
SPI推挽驱动、时钟同步、无地址仲裁开销、速率不受上拉限制;I2C开漏+上拉限制上升时间
多个从机怎么接?
共用SCK/MOSI/MISO,每个从机独立CS;或菊花链(特殊场景)
✅ 自查清单 (点击勾选,本地保存)
0/0
能画出SPI 4线连接
知道CPOL/CPHA四种模式
会说SPI比I2C快的本质原因
会写SPI读写Flash时序
知道CS片选管理多从机