当前位置: 首页 > news >正文

STM32学习笔记【30.SPI总线】

文章目录

  • 前言
  • IIC 与 SPI对比
  • 一、SPI是什么?
  • 二、SPI物理架构
  • 三、SPI工作原理
  • 四、 SPI工作模式【4种工作模式】
  • 五、SPI寄存器介绍
    • 1. SPI控制寄存器1(SPI_CR1)(I2S模式下不使用)
    • 2. SPI控制寄存器2(SPI_CR2)
    • 3. SPI 状态寄存器(SPI_SR)
    • 4. SPI 数据寄存器(SPI_DR)
  • 六、库函数
  • 总结

前言

本文主要介绍SPI相关理论知识,其物理架构、工作原理、工作模式以及寄存器和库函数等内容,更全面的了解SPI。


IIC 与 SPI对比

  1. IIC是半双工通讯,无法同时收发信息【发时无法收,收时无法发】;SPI是全双工通讯,可以同时收发信息;
  2. IIC通讯协议较复杂,而SPI通讯协议较简单
  3. IIC需要通过地址选择从机,而SPI只需一个引脚即可选中从机;【与从机通信,拉低该引脚既可】
  4. IIC通讯速率一般为100kHz左右,而SPI可以达到50MHz【速率快】
  5. IIC需要的通讯线较少,而SPI需要的通讯线较多。

一、SPI是什么?

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。

二、SPI物理架构


SPI总线包含4条通讯线,分别为SS、SCK、MOSI、MISO。它们的作用介绍如下:
(1)MISO- Master Input Slave Output, 主设备数据输入,从设备数据输出
(2)MOSI- Master Output Slave Input,主设备数据输出,从设备数据输入
(3)SCK- Serial Clock,时钟信号,由主设备产生
(4)SS(CS)- Chip Select, 片选信号,由主设备控制

STM32F1系列芯片有3个SPI接口。

三、SPI工作原理


只发送:不管从机收到什么就行
只接收:随便发一点东西,把从机的内容接收过来。

正常发0xFF,把从机数据交换过来。

SPI框图

四、 SPI工作模式【4种工作模式】

思考:SPI通过波特率发生器,来一个时钟进行一次移位,思考时钟是上升沿触发还是下降沿触发?高电平触发还是低电平触发?
需要知道【时钟极性】和【时钟相位】

时钟极性【CPOL】
没有数据传输时时钟线的空闲状态电平
0:SCK在空闲状态保持低电平
1:SCK在空闲状态保持高电平

时钟相位(CPHA):
时钟线在第几个时钟边沿采样数据
0:SCK的第一(奇数)边沿进行数据位采样,数据在第一个时钟边沿被锁存
1:SCK的第二(偶数)边沿进行数据位采样,数据在第二个时钟边沿被锁存

SPI工作模式CPOLCPHASCL空闲状态采样边沿采样时刻
000低电平上升沿奇数边沿
101低电平下降沿偶数边沿
210高电平下降沿奇数边沿
311高电平上升沿偶数边沿

模式0和模式3最常用

模式0时序图:
CS片选信号,先拉低,再拉高
CLK:高低→高低
橙色线进行采样

模式3相反,偶数边沿采样

五、SPI寄存器介绍

1. SPI控制寄存器1(SPI_CR1)(I2S模式下不使用)


BIDIMODE:双向数据模式使能,可选择是全双工还是半双工模式。
DFF:数据帧格式 (Data frame format)。可配置8位或16位。
SSM:软件从设备管理,控制NSS引脚
LSBFIRST:帧格式
SPE:SPI使能,设置1用SPI
BR[2:0]:波特率控制
MSTR:主设备选择,0——从设备;1——主设备
CPOL:时钟极性
CPHA:时钟相位

2. SPI控制寄存器2(SPI_CR2)


TXEIE:发送缓冲区空中断使能
RXNEIE:接收缓冲区非空中断使能

3. SPI 状态寄存器(SPI_SR)


TXE:发送缓冲为空,1为空 TDR
RXNE:接收缓冲非空,1为非空 RDR

4. SPI 数据寄存器(SPI_DR)


数据寄存器对应两个缓冲区:一个用于写(发送缓冲)【TDR】;另外一个用于读(接收缓冲)【RDR】。写操作将数据写到发送缓冲区;读操作将返回接收缓冲区里的数据。

六、库函数

HAL_SPI_Init();// 发送与接收函数,操作DR寄存器HAL_SPI_TransmitReceive();// 数据量大,用DMAHAL_SPI_TransmitReceive_DMA();// 中断HAL_SPI_TransmitReceive_IT();

SPI理论部分到这结束,但SPI是一个通信接口,需要一个设备进行通信。【W25Q128设备】

总结

SPI是串行外设接口,是一种高速的、全双工、同步的通信总线。其速度能达到几十Mbps,甚至上百Mbps。
它需要四根线,分别为SCK、MOSI、MISO、SS。MOSI、MISO可以同时传输数据,效率高,无复杂协议,主机拉低片选信号,开始传输时钟和数据。
缺点是多一个从机,多一个SS线,IO口消耗大,虽然可以用译码器扩展,但没有I2C省IO口。
SPI没有标准的协议规范,时钟极性、相位要配置对才能通信。
应用场景上,高速设备首选SPI,Flash存储器、SD卡、高速ADC、DAC、无线模块,都是对高速有要求的。

http://www.jsqmd.com/news/1119166/

相关文章:

  • Excel 的质量管控文档设计
  • zkGolf 竞赛:构建成本最低零知识电路,电路越紧凑得分越优!
  • 如何一键实现8个平台同步直播:OBS多RTMP插件完全指南
  • Python1
  • CSRF攻击原理与防御策略全解析:从Samesite Cookie到Token验证实战
  • AllenAI:终端智能体强化学习训练配方
  • 怎么量化一个 AI Agent 的好坏?面试官问「Agent 评测」时真正想听什么
  • 1、<入门>计算2个整数的和,这两个整数在1~100之间
  • 预约留资小程序制作工具测评:餐宝盈/BBWEYY/比文云/Landingi/Webnode(2026年7月更新)含零代码SAAS、AI编程、源码定制交付
  • 如何用四个节点搭建 ChatGPT 答案批量爬取工具:n8n + Scrapeless,无代码指南
  • 大语言模型能力评测:V3题库深度解析与实操指南
  • 为了优雅地下载网页视频,我顺手写了个开源扩展:FlowPick 诞生记
  • 大数据工程师必修课:核心技能全解析
  • 数学分析原理答案——第九章 习题25
  • Copilot开发实践:从集成部署到工作流优化
  • 有格调火锅店理性测评|行业避坑+科学选型指南
  • C语言题目初学(4)--字符串
  • ECP5702 PD Sink协议芯片在无电池照明产品中的应用
  • 11款米哈游架空文字字体:为你的设计项目注入游戏文化内涵
  • 千元电动牙刷核心技术解析:磁悬浮电机与智能算法
  • 大模型推理服务架构演进2026:Serverless、K8s与边缘部署的工程选型
  • C语言箭头操作符(->)完全教程:用法与实例
  • PyTorch 2.0 反向传播实战:从计算图到梯度下降的 5 步代码实现
  • PHP 5.x + MySQL SQL注入实战:3种经典绕过手法与防御代码对比
  • 2026年7月Agent开发面试题 -- 基础篇
  • 1940-2025年全国多级行政单元逐时气象数据
  • VScode SSH 免密连接 一键脚本
  • Holoscan SDK 概述
  • 深入解析pytest_terminal_summary钩子:从原理到实战的测试报告终极定制指南
  • 建筑外立面缺陷智能识别:YOLOv26驱动下的多类损伤检测数据集与实战10748期