SPI简介
SPI和IIC都是高位先行,串口是低位先行
SPI1是APB2(72Mhz)的外设,SPI2是APB1(36Mhz)的外设,所以SP1比SP12要快
SPI基本结构
TDR转移到移位寄存器置TXE标志位,移位寄存器转移到RDR置RXNE标志位
可以发现SPI的硬件和IIC、串口是异曲同工的,其中SPI和串口都是全双工(也就是TXR和RDR分别工作)而IIC是半双工
SS片选用GPIO口来模拟
SPI全双工连续传输
SCK下降沿,MISO和MOSI分别移入移除数据
发送部分:当SCK开始时,也就是开始传输时,TXE标志为0,这时就写入数据,因为移位是才开始写入,就直接写入到移位寄存器,紧接着TXE为1,表示正在发送数据,此时发送寄存器TDR空,所以马上写入下一个数据
SPI全双工非连续传输
当检测到TXE为1,就软件写入数据到数据寄存器TDR,TXE为0,因为是才开始发送,所以目前移位寄存器为空,所以数据直接转移到移位寄存器中进行发送,波形产生,TXE为1(表示可以写入下一个数据了)
连续模式和非连续模式的区别就在于:在连续模式中,一旦TXE为1,就模式写入下一个数据进行等待,实现无缝衔接;而在非连续模式中,TXE为1,不着急写入下一个数据,而是等待第一个时序结束,才写入下一个数据,只要波形传输完成,RXNE为1,这时就读取数据,之后再写入下一个数据
总结:
- 等待TXE为1
- 写入数据到TDR
- 等待RXNE为1
- 读取RDR数据
缺点:
在字节与字节之间会产生间隙,拖慢了传输速度(SCK频率低没问题,SXK频率高就不行)