SPI简介

串行外设接口 (SPI Serial peripheral interface) 可与外部器件进行半双工/全双工的同步串行通信。该接口可配置为主模式,在这种情况下,它可为外部从器件提供通信时钟 (SCK)。该接口还能够在多主模式配置下工作。

undefined

SPI 有四个逻辑信号:

SCLK:串行时钟(来自主时钟信号)

MOSI : Main Out Sub In(主输出数据)

MISO:Main In Sub Out(从子机输出数据)

CS :片选(从主设备到地址子设备的低电平有效信号并启动传输)

主设备上的 MOSI 输出到副设备上的 MOSI。子设备上的 MISO 输出到主设备上的 MISO。SPI 与作为主设备的单个设备和一个或多个子设备一起运行。

在STM32中,从器件选择有两种模式:

  • 软件管理 NSS (SSM = 1)

从器件选择信息在内部由 SPI_CR1 寄存器中的 SSI 位的值驱动。外部 NSS 引脚空

闲,可供其它应用使用。

  • 硬件管理 NSS (SSM = 0)

根据 NSS 输出配置(SPI_CR1 寄存器中的 SSOE 位),硬件管理 NSS 有两种模式。

— NSS 输出使能(SSM = 0,SSOE = 1) 仅当器件在主模式下工作时才使用此配置。当主器件开始通信时,NSS 信号驱动 为低电平,并保持到 SPI 被关闭为止。

— NSS 输出禁止(SSM = 0,SSOE = 0) 对于在主模式下工作的器件,此配置允许多主模式功能。对于设置为从模式的器 件,NSS 引脚用作传统 NSS 输入:在 NSS 为低电平时片选该从器件,在 NSS 为 高电平时取消对它的片选。

SPI模式

CPHA(clock phase)时钟相位,

为零:在第一个跳变沿采集数据

为一:在第二个跳变沿采集数据

CPOL(clock polarity) 时钟极性

为零:空闲时间为低电平

为一:空闲时间为高电平

SPI模式

时钟极性
(CPOL)

时钟相位
(CPHA)

数据移出于

数据采样于

0

0

0

SCLK下降, CS激活时

上升沿SCLK

1

0

1

上升沿SCLK

SCLK下降

2

1

0

SCLK上升, CS激活时

SCLK下降

3

1

1

SCLK下降

上升沿SCL

在全双工操作中,主设备可以使用不同的模式进行发送和接收。例如,它可以同时以模式 0 发送并以模式 1 接收。

通讯模式

全双工模式(Full_Duplex)

在使能SPI以后

将要发送的第一个数据写入发送缓冲区中,此时TXE表示为清零

TXE=1时,写入第二个数据。使用软件清零

RXNE=1时,将缓冲区数据读出,这个操作将是的RXNE重新置0

等待RXNE=1,接受最后一个数据

等待TXE=1

等待BSY=0

关闭SPI

DMA传输请求

● 在发送过程中,每次 TXE 位置 1 都会发出 DMA 请求。DMA 随后对 SPI_DR 寄存器执 行写操作(此操作会将 TXE 标志清零)。

● 在接收过程中,每次 RXNE 位置 1 都会发出 DMA 请求。DMA 随后对 SPI_DR 寄存器 执行读操作(此操作会将 RXNE 标志清零)。