SPI外设简介
SPI1与SPI2所挂载的总线位置不一样,所以时钟频率也不一样,SPI2挂载在APB1时钟频率为36MHZ是SPI1的一半
I2S是一种音频传输协议,适用于STM32大容量产品
一般来说串口发送数据时是低位先行,SPI通信是高位先行
SPI框图
- 发送缓冲区TDR,接收缓冲区RDR。当我们要传输一批数据时,写入数据到TDR,TDR 的值会自动根据移位寄存器的情况移入数据。当TXE置为1时表示TDR为空,我们可以将数据及时的写入TDR,移位寄存器的数据又会被移出去。当移出完成时,输入的数据也被置换到移位寄存器,此时移位寄存器的数据又会整体的移入RDR。此时RXNE被置为1,表示RDR里有数据。我们要即使的读取RDR里的数据并且软件置为0,否则数据将会被覆盖。
SPI主模式全双工连续传输【不推荐】
使用复杂,但是传输快。
- 当有数据放置到TDR时,TXE置为0表示数据正在移动到移位寄存器,当TXE置为1时此时TDR为空,立马移入下一个数据。当移位寄存器完成数据的置换并且移除到RDR时,此时才能将TDR的数据移入到移位寄存器,如此往复
- 当RXNE为1时,代表接收到数据已经放到RDR上,此时要尽快的读出,并且软件清0
- 我们可以很明显的看到,这个发送和接收的顺序很不规则,首先是发送数据一再发送数据二然后才接收数据一,对于代码编写不友好
SPI非连续传输【推荐】
使用简单,但是传输效率低。
- 当有数据放置到TDR时,TXE置为0表示数据正在移动到移位寄存器,当TXE置为1时此时TDR为空,不需要立马移入下一个数据,而是等到数据置换完成并且等待一段时间后才放入新的数据到TDR。
- 我们可以对比看出这么做的目的就是为了能够发送一个数据,接收一个数据,这样顺序的发收程序更为容易理解,但是损失了很多性能。