SPI简介
串行外设接口 (SPI Serial peripheral interface) 可与外部器件进行半双工/全双工的同步串行通信。该接口可配置为主模式,在这种情况下,它可为外部从器件提供通信时钟 (SCK)。该接口还能够在多主模式配置下工作。
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模式 | 时钟极性 | 时钟相位 | 数据移出于 | 数据采样于 |
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 标志清零)。