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、无线模块,都是对高速有要求的。