SPI 个人总结(来自STM32F10XXX参考手册)

一、SPI简介

       串行外设接口 (SPI) 允许芯片与外部设备以 半/全双工、同步、串行方式通信 此接口可以被配置成 主模式,并 为外部从设备提供通信时钟(SCK)。接口还能以 多主配置方式工作。它可用于多种用途,包括使用一条双向数据线的双线单工同步传输,还可使用CRC校验的可靠 通信。

SPI特征:

3线全双工同步 传输
● 带或不带第三根双向数据线的双线单工同步传输
8或16位传输帧 格式选择
主或从 操作
● 支持 多主 模式
8 个主模式波特率预分频系数 ( 最大为 f PCLK /2)
● 从模式频率 ( 最大为 f PCLK /2)
● 主模式和从模式的快速通信
● 主模式和从模式下均可以由 软件或硬件 进行 NSS管理 :主 / 从操作模式的动态改变
● 可编程的 时钟极性和相位
● 可编程的 数据顺序 MSB在前或LSB在前
● 可触发 中断 的专用 发送和接收 标志
SPI 总线忙 状态标志
● 支持可靠通信的硬件 CRC
在发送模式下, CRC值可以被作为最后一个字节发送
在全双工模式中对接收到的最后一个字节自动进行 CRC 校验
● 可触发中断的主模式故障、过载以及 CRC 错误标志
● 支持 DMA 功能的 1字节发送和接收缓冲器 :产生发送和接受请求
SPI框图
通常 SPI 通过 4 个引脚与外部器件相连:
MISO :主设备输入 / 从设备输出引脚。该引脚在 从模式 送数据,在 主模式 收数据。
MOSI :主设备输出 / 从设备输入引脚。该引脚在 主模式 送数据,在 从模式 收数据。
SCK :串口时钟,作为 主设备的输出 从设备的输入
NSS :从设备选择。作为“片选引脚”, 让主设备可以单独地与特定从设备通讯,避免数据线上的冲突, 从设备的NSS引脚可以 由主设备的一个标准 I/O引脚来驱动 
例如:单主和单从应用
        这里 NSS 引脚设置为 输入MOSI脚相互连接,MISO脚相互连接 。这样,数据在主和从之间串行地传输 (MSB 位在前 ) 通信总是由主设备发起 主设备通过MOSI脚把数据发送给从设备,从设备通过MISO引脚回传 数据 。这意味 全双工通信 的数据输出和数据输入是用同一个 时钟信号同步 的; 时钟信号由主设备通过SCK脚提供
时钟信号的相位和极性
        SPI_CR寄存器的 CPOL ( 时钟 极性 )和 CPHA ( 时钟 相位 )位, CPOL(时钟极性)位 控制在没有数据传输时时钟的空闲状态电平,此位对主模式和从模式下的设备都有效。
如下图所示 : 组合成 四种 可能的 时序 关系:
注意
1.  改变CPOL/CPHA位之前 ,必须清除SPE位将SPI禁止
2. 主和从必须配置成相同的时序模式。
3. SCK的空闲状态必须和SPI_CR1寄存器指定的极性一致(CPOL为’1’时,空闲时应上拉SCK
高电平;CPOL’0’时,空闲时应下拉SCK为低电平)

二、配置SPI为从模式

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

1、配置步骤:

1)、定义数据帧格式 8或者16
2)、选择 CPOL和CPHA位定义数据传输和串行时钟之间的相位关系,从和主设备需保持一致
3)、帧格式( LSB还是MSB在前),需和主设备相同
4)、NSS引脚配置:一般使用 软件模式,在完整的数据帧传输过程中,NSS必须为低电平。
5).、 清除 MSTR 位、设置 SPE (SPI_CR1 寄存器 ) ,使相应引脚工作于 SPI 模式下。
在这个配置中, MOSI引脚是数据输入,MISO引脚是数据输出

2、数据发送过程

        在写操作中,数据字被并行地写入发送缓冲器。当从设备收到时钟信号,并且在MOSI引脚上出现第一个数据位时,发送过程开始(译注:此时 第一个位被发送出去)余下的位(对于8位数据帧格式,还有7位;对于16位数据帧格式,还有 15位)装进移位寄存器。当发送缓冲器中的数据全传输到移位寄存器时,SPI_SR寄存器的TXE (发送缓冲区位空)标志被设置如果设置了SPI_CR2寄存器的TXEIE位(发送缓冲区空中断使能),将会产生中断

3、数据接收过程

        对于接收器,当数据接收完成时,移位寄存器中的数据传送到接收缓冲器,SPI_SR 寄存器中的RXNE(接收缓冲区非空)标志被设置。如果设置了SPI_CR2寄存器中的RXNEIE(接收缓冲区非空中断使能)位,则产生中断。 在最后一个采样时钟边沿后,RXNE位被置’1’,移位寄存器中接收到的数据字节被传送到接收缓冲器。当读SPI_DR寄存器时,SPI设备返回这个接收缓冲器的数值。 读SPI_DR寄存器时,RXNE位被清除。

三、配置SPI为主模式

在主配置时,在SCK脚产生串行时钟。

1、配置步骤:

1)、定义串行时钟 波特率
2)、定义数据帧格式 8或者16
3)、选择 CPOL和CPHA位定义数据传输和串行时钟之间的相位关系,从和主设备需保持一致
4)、帧格式( LSB还是MSB在前),需和主设备相同
5)、NSS引脚配置:一般使用 软件模式
6).、设置 MSTR 位、设置 SPE (SPI_CR1 寄存器 ) ,使相应引脚工作于 SPI 模式下。
在这个配置中, MOSI引脚是数据输出,MISO引脚是数据输入

2、数据发送过程

        当写入数据至发送缓冲器时,发送过程开始。 在发送第一个数据位时,数据字被并行地(通过内部总线)传入移位寄存器,而后串行地移出到 MOSI脚上MSB在先还是LSB在先,取决于SPI_CR1寄存器中的LSBFIRST位的设置。数据从发送缓冲器传输到移位寄存器时TXE(发送缓冲区为空)标志将被置位如果设置SPI_CR1寄存器中的TXEIE(发送缓冲区空中断使能)位,将产生中断

3、数据接收过程

        对于接收器来说,当数据传输完成时。传送移位寄存器里的数据到接收缓冲器,并且RXNE标志被置位。 如果设置了SPI_CR2寄存器中的RXNEIE位,则产生中断。 在最后采样时钟沿,RXNE位被设置,在移位寄存器中接收到的数据字被传送到接收缓冲器。读 SPI_DR寄存器时,SPI设备返回接收缓冲器中的数据。 读SPI_DR寄存器将清除RXNE位。一旦传输开始,如果下一个将发送的数据被放进了发送缓冲器,就可以维持一个连续的传输流。在试图写发送缓冲器之前,需确认TXE标志应该为’1’

四、主或从模式下并且全双工发送和接收过程模式

1、状态标志:应用程序通过3个状态标志可以完全监控SPI总线的状态

发送缓冲区空闲标志(TXE)  :  

       此标志为’1’时表明发送缓冲器为空,可以写下一个待发送的数据进入缓冲器中。当写入SPI_DR 时,TXE标志被清除

接收缓冲器非空(RXNE) :
        此标志为“1”时表明在接收缓冲器中包含效的接收数据读SPI数据寄存器可以清除此标志。

(Busy) 标志(BSY):
        BSY标志由硬件设置与清除 ( 写入此位无效果 ) ,此标志表明 SPI 通信层的状态。
当它被设置为 ’1’ 时,表明 SPI正忙于通信 ,但有一个例外:在主模式的双向接收模式下
(MSTR=1 BDM=1 并且 BDOE=0) ,在接收期间 BSY 标志保持为低。
在软件要关闭 SPI 模块并进入停机模式 ( 或关闭设备时钟 ) 之前,可以 使用BSY标志检测传输是否
结束 ,这样可以避免破坏最后一次传输,因此需要严格按照下述过程执行。
BSY 标志还可以用于在多主系统中避免写冲突。
除了主模式的双向接收模式 (MSTR=1 BDM=1 并且 BDOE=0) ,当传输开始时, BSY 标志被
’1’
以下情况时此标志将被清除为 ’0’
● 当传输结束 ( 主模式下,如果是连续通信的情况例外 )
● 当关闭 SPI 模块;
● 当产生主模式失效 (MODF=1)
如果通信不是连续的,则在每个数据项的传输之间, BSY 标志为低。
当通信是连续时:
主模式下:在整个传输过程中,BSY标志保持为高;
从模式下:在每个数据项的传输之间,BSY标志在一个SPI时钟周期中为低。
        

2、软件必须遵循下述过程,发送和接收数据:

1. 设置 SPE 位为 ’1’ 使能SPI 模块;
2. SPI_DR 寄存器中 写入第一个 要发送的数据,这个操作会 清除TXE标志
3. 等待TXE=1 ,然后 写入第二个 要发送的数据。 等待RXNE=1 ,然后 读出 SPI_DR 寄存器并获得第一个接收到的数据,读SPI_DR 同时清除了RXNE 位。 重复 这些操作, 发送 后续的数据 同时接n-1个数据
4. 等待RXNE=1 ,然后接收 最后一个 数据;
5. 等待TXE=1 在BSY=0 之后 关闭SPI 模块。
主模式 、全双工模式下连续传输时,TXE/RXNE/BSY的变化示意图如下:
从模式 、全双工模式下 连续传输时, TXE/RXNE/BSY 的变化示意图如下:

3、SPI中断请求:

五、利用DMA的SPI通信

        为了达到最大通信速度,需要及时往SPI发送缓冲器填数据,同样接收缓冲器中的数据也必须及 时读走以防止溢出。为了方便高速率的数据传输,SPI 实现了一种采用简单的请求 / 应答的 DMA
机制。

SPI_CR2寄存器使能DMA

        
● 发送时,在每次 TXE 被设置为 ’1’ 时发出 DMA 请求, DMA 控制器则写数据至 SPI_DR 寄存
器, TXE 标志因此而被清除。
● 接收时,在每次 RXNE 被设置为 ’1’ 时发出 DMA 请求, DMA 控制器则从 SPI_DR 寄存器读出数
据, RXNE 标志因此而被清除。

1、使用DMA发送:

2、使用DMA接收:

  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: stm32f10xxx参考手册是一本详尽的文档,包含了STM32F10xxx微控制器系列的技术规格、电气规范、引脚定义、寄存器和外设的完整说明。这份参考手册是开发STM32F10xxx系列微控制器的必备工具,既适用于初学者也适用于经验丰富的工程师。 下面是该参考手册的一些主要内容: 1. 总览:该部分提供了STM32F10xxx系列微控制器的概述,包括各种型号、运行频率、内存大小等。此外,它还包括关于STM32F10xxx系列的优点,例如低功耗、高性能、灵活的外设等。 2. 器件结构:该章节详细描述了该系列微控制器的结构和架构。它介绍了内存系统、外设和处理器,以及它们之间的相互作用。此处还包括关于存储器映射和总线结构的部分,这对于理解STM32F10xxx微控制器的实际体系结构非常重要。 3. 电气规范:该部分详细描述了微控制器的电气属性和规范。其中包括关于电器特性、静电放电保护、封装和焊接标准等信息。 4. 引脚描述:该章节详细讲解了STM32F10xxx微控制器的引脚配置及其对应的功能。对于初学者来说,这是非常重要的,因为它涉及到在电路设计中如何使用微控制器的引脚。 5. 寄存器和外设的描述:该章节详细介绍了STM32F10xxx微控制器的寄存器,包括外设和通用寄存器。此外,该章节还包括不同外设的完整说明,例如计时器、串口、SPI、I2C等。 总之,stm32f10xxx参考手册STM32F10xxx微控制器的主要文档,提供了很多有用的信息和指导,可以帮助工程师更好地理解和使用该微控制器系列,从而更有效地完成设计任务。 ### 回答2: stm32f10xxx参考手册是一份非常重要的文档,它提供了有关stm32f10xxx微控制器系列的详细信息和规格说明。该手册是针对stm32f10xxx系列的各种微控制器的,从stm32f100到stm32f199,共计数百种型号。 参考手册提供了有关芯片功能、引脚分配、时钟控制、通信接口、外设控制、中断控制等详细信息。其中还包括了芯片的电气规格、温度特性、电源要求、机械特性等。 参考手册不仅提供了在使用stm32f10xxx系列微控制器时必备的技术细节,而且还提供了其他相关资源,如标准固件库等。 总的来说,stm32f10xxx参考手册对于工程师和开发人员来说都是一本必备的工具书。它帮助开发人员了解微控制器的每个细节,为开发和调试而提供必要的信息,使开发人员能够设计出更加高效和可靠的产品。 ### 回答3: STM32F10xxx参考手册是一份详细的文档,为STM32F10xxx微控制器提供了全面的技术信息。该手册包含了STM32F10xxx微控制器的主要功能和特性,以及相关设计和应用指南。STM32F10xxx微控制器是针对嵌入式应用设计的高性能芯片。该微控制器拥有32位的处理能力,在高速数据处理和强大的控制方面具有出色的表现。STM32F10xxx参考手册详细介绍了该微控制器的硬件架构和软件开发工具,包括指令集、时钟系统、时序控制、外部中断、DMA控制器和多种I/O接口等。该手册还详细介绍了有关STM32F10xxx微控制器的开发和调试过程中需要注意的事项,以及常见问题的解决方法,使得开发人员能够更加高效地利用该微控制器进行嵌入式应用开发。总之,STM32F10xxx参考手册是一份必不可少的文档,对于任何需要使用STM32F10xxx微控制器进行开发和设计的人员来说都是非常有价值的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值