0%

11-3SPI通信外设&硬件SPI读写W25Q64

SPI外设简介

•STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担
•可配置8位/16位数据帧、高位先行/低位先行
•时钟频率: fPCLK / (2, 4, 8, 16, 32, 64, 128, 256);不支持任意指定,只能进行指定的8种分频
•支持多主机模型、主或从操作
•可精简为半双工/单工通信
•支持DMA
•兼容I2S协议(音频传输协议)
•STM32F103C8T6 硬件SPI资源:SPI1(APB2,72M)、SPI2(APB1,36M)

SPI框图

SPI框图
左上角,核心部分是移位寄存器,右边的数据低位,一位位地从MOSI移出去,然后MISO的数据,一位一位地移入到左侧地数据高位。LSBFIRST可以控制是低位先行(1,LSB)还是高位先行(0,MSB)
右下角,波特率发生器,是用来产生SCK时钟的。CR1寄存器的三个系数BR0,BR1,BR2用来控制分频系数。
NSS引脚,SS是从机选择,低电平有效。通常多从机使用。

SPI基本结构

SPI基本结构
核心部分位为数据寄存器和移位寄存器。TDR寄存器整体移入移位寄存器,置TXE标志位。移位寄存器整体移入RDR时,置RXNE标志位。

主模式全双工连续传输

主模式全双工连续传输
性能强,使用复杂。
CPOL=1,CPHA=1,示例使用的是SPI模式3。
第一行,SCK时钟线。在时钟线第一个下降沿,MOSI和MISO移出数据,之后上升沿移入数据,依次进行。
TXE是发送寄存器空标志位。
BSY标志,当有数据传输时,BSY置1。

非连续传输

非连续传输
容易使用,但是损失性能。

硬件SPI读写W25Q64

常用函数
1
void SPI_I2S_DeInit(SPI_TypeDef* SPIx);

SPI恢复缺省配置

1
void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct);

SPI初始化

1
void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct);

SPI结构体初始化

1
void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);

SPI外设使能

1
void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState);

SPI中断使能

1
void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState);

DMA使能

1
void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);

写DR数据寄存器

1
uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);

读DR数据寄存器

1
FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG);

SPI获取标志位状态