赞
踩
● 3线全双工同步传输
● 带或不带第三根双向数据线的双线单工同步传输
● 8或16位传输帧格式选择
● 主或从操作
● 支持多主模式
● 8个主模式波特率预分频系数(最大为fPCLK/2)
● 从模式频率 (最大为fPCLK/2)
● 主模式和从模式的快速通信
● 主模式和从模式下均可以由软件或硬件进行NSS管理:主/从操作模式的动态改变
● 可编程的时钟极性和相位
● 可编程的数据顺序,MSB在前或LSB在前
● 可触发中断的专用发送和接收标志
● SPI总线忙状态标志
● 支持可靠通信的硬件CRC
─ 在发送模式下,CRC值可以被作为最后一个字节发送
─ 在全双工模式中对接收到的最后一个字节自动进行CRC校验
● 可触发中断的主模式故障、过载以及CRC错误标志
● 支持DMA功能的1字节发送和接收缓冲器:产生发送和接受请求

STM32的SPI有2种NSS模式:



配置SPI_CR1寄存器的CPOL和CPHA位,能够组合成四种可能的时序关系
CPOL(时钟极性)位控制在没有数据传输时时钟的空闲状态电平,此位对主模式和从模式下的设备都有效。
CPHA(时钟相位)位控制数据采样的边沿
主和从设备必须配置成相同的时序模式

根据SPI_CR1寄存器中的LSBFIRST位,输出数据位时可以MSB位在先也可以LSB位在先。
根据SPI_CR1寄存器的DFF位,每个数据帧可以是8位或是16位。
所选择的数据帧格式对发送和接收都有效。


在为主设备时,在SCK脚产生串行时钟;由主设备决定时钟频率。
置位SPI_CR1寄存器的MSTR位。



在从模式下,SCK引脚用于接收从主设备来的串行时钟。
SPI_CR1寄存器中BR[2:0]的设置不影响数据传输速率。
建议在主设备发送时钟之前使能SPI从设备,否则可能会发生意外的数据传输
配置步骤

在接收时,接收到的数据被存放在一个内部的接收缓冲器中;
在发送时,在被发送之前,数据将首先被存放在一个内部的发送缓冲器中。
| 模式 | BIDIMODE | BIDIOE | RXONLY | 工作引脚 |
|---|---|---|---|---|
| 全双工模式 | 0 | 0 | 0 | TX:MOSI;RX:MISO |
| 单工模式(单向的只接收模式) | 0 | 0 | 1 | RX:MISO |
| 半双工模式(发送模式) | 1 | 1 | 0 | TX:MOSI |
| 半双工模式(接收模式) | 1 | 0 | 0 | RX:MOSI |
全双工模式
当写入数据到SPI_DR寄存器(发送缓冲器)后,传输开始;
在传送第一位数据的同时,数据被并行地从发送缓冲器传送到8位的移位寄存器中,然后按顺序被串行地移位送到MOSI引脚上;
与此同时,在MISO引脚上接收到的数据,按顺序被串行地移位进入8位的移位寄存器中,然后被并行地传送到SPI_DR寄存器(接收缓冲器)中。
单向的只接收模式
SPE=1时,传输开始;
只有接收器被激活,在MISO引脚上接收到的数据,按顺序被串行地移位进入8位的移位寄存器中,然后被并行地传送到SPI_DR寄存器(接收缓冲器)中。
半双工模式(发送模式)
当写入数据到SPI_DR寄存器(发送缓冲器)后,传输开始;
在传送第一位数据的同时,数据被并行地从发送缓冲器传送到8位的移位寄存器中,然后按顺序被串行地移位送到MOSI引脚上;不接收数据。
半双工模式(接收模式)
SPE=1并且BIDIOE=0时,传输开始;
在MOSI引脚上接收到的数据,按顺序被串行地移位进入8位的移位寄存器中,然后被并行地传送到SPI_DR寄存器(接收缓冲器)中。不激活发送器,没有数据被串行地送到MOSI引脚上。
| 模式 | BIDIMODE | BIDIOE | RXONLY | 工作引脚 |
|---|---|---|---|---|
| 全双工模式 | 0 | 0 | 0 | TX:MISO;RX:MOSI |
| 单工模式(单向的只接收模式) | 0 | 0 | 1 | RX:MOSI |
| 半双工模式(发送模式) | 1 | 1 | 0 | TX:MISO |
| 半双工模式(接收模式) | 1 | 0 | 0 | RX:MISO |


在写入发送缓冲器之前,软件必须确认TXE标志为’1’
应用程序通过3个状态标志可以完全监控SPI总线的状态。
当通讯结束,可以通过关闭SPI模块来终止通讯。清除SPE位即可关闭SPI。
在某些配置下,如果在传输还未完成时,就关闭SPI模块并进入停机模式,则可能导致当前的传输被破坏,而且BSY标志也变得不可信。
为了避免发生这种情况,关闭SPI模块时,建议按照下述步骤操作:
在SPI_DR寄存器中写入最后一个数据后:
这种情况需要特别地处理,以保证SPI不会开始一次新的传输:
注: 在主模式下的单向只接收模式(MSTR=1,BDM=1,BDOE=0)时,传输过程中BSY标志始终为低。
为了达到最大通信速度,需要及时往SPI发送缓冲器填数据,同样接收缓冲器中的数据也必须及时读走以防止溢出。为了方便高速率的数据传输,SPI实现了一种采用简单的请求/应答的DMA机制。

在发送模式下,当DMA已经传输了所有要发送的数据(DMA_ISR寄存器的TCIF标志变为’1’)后,可以通过监视BSY标志以确认SPI通信结束,这样可以避免在关闭SPI或进入停止模式时,破坏最后一个数据的传输。因此软件需要先等待TXE=1,然后等待BSY=0。


以后再更
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。