- STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担
- 可配置8位/16位数据帧、高位先行/低位先行
- 时钟频率: fPCLK / (2, 4, 8, 16, 32, 64, 128, 256)
- 支持多主机模型、主或从操作
- 可精简为半双工/单工通信
- 支持DMA
- 兼容I2S协议(数字音频信号传输的专用协议)
SPI框图
首先移位寄存器,从右边的数据低位,从MOSI移出去;MISO数据移入到左边的数据高位,即移位寄存器是一个右移的状态。
接收、发送缓冲区实际上就是数据寄存器RDR、发送数据寄存器TDR,TDR和RTR占用同一个地址,统一叫作为DR。
波特率发生器主要是产生SCK时钟,内部主要是一个分频器,然后CR1寄存器的三个位BR0、BR1、BR2控制分频系数。
SPI基本结构
TDR和RTR的配合,可以实现连续的数据流。
TDR数据整体转入移位寄存器的时刻,置TXE标志位;移位寄存器整体转入RDR的时刻,置RXNE标志位。
主模式全双工连续传输
BIDMODE=0且RXONLY=0,TXE/RXNE/BSY的变化
这个图演示的是借助缓冲区,数据前仆后继,实现连续数据流的过程,但此流程比较复杂,不易封装。
非连续传输
BIDMODE=0且RXONLY=0时,TXE/BSY的变化
步骤分为以下:
1、等待TEX为1;
2、写入发送的数据至TDR;
3、等待RXNE为1;
4、读取RDR接收的数据;