STM32 SPI

SPI通信过程简述:

两根数据线:对应于通信双方的各自数据发送端和接收端

一根时钟线:用于通信的同步

一根NSS线:简单来说其作用是使能

 

通信过程

双方数据通过时钟的电平边沿保持同步:(SPI只利用了其中一种边沿:即要么上边沿要么下边沿)

因此对于时钟信号来说,最低要求就是要有边沿的变化,而要产生边沿的变化,有多种选择:

  • 时钟信号可有两种形式:空闲时高 空闲时低 ->STM32中由CPOL进行选择
  • 数据的同步方式也有两种选择:上升沿通信 下降沿通信  -> STM32中由CPHA进行选择

当然,通信双方的上述配置要相同

 

再具体些:

当时钟信号的有效边沿到来时,在MOSIMISO上发生了如下事情:

MOSI:主发从收

MISO:从发主收

由此完成了一个位数据的交换,接着双方等待下一个有效边沿的到来,如此循环

 

再具体些:

这里的所谓的“发”,不过是把数据线设置成对应的电平,而“收”就是检测一下数据线的电平。显然,收要在发之后,因此——————>在时钟信号的有效边沿到来前,发送方就要准备好数据(即提前设置数据线的电平),边沿到来时接收方检测一下就行了

 

 

主和从的区别是什么?

主:提供时钟信号

 

NSS详解: 

Before:

NSS有两种模式:

  1. 软件模式:类似于用一个寄存器代表实际的引脚状态
  2. 硬件模式:实际引脚状态

 

从设备:

  NSS信号为低时才能通信(包括软件和硬件)

主设备:

NSS又分输入和输出模式:

  输入:输入模式的作用就是两个字——检测

  检测NSS是否为高,若为低表示总线被占用,工作失败,自动切换至从模式(检测对象可为软件模拟引脚或实际引脚,若采用软件,则SSI位作为引脚的模拟就要被置1,官方库中指定modeSPI_Mode_Maste时就同时设定了SSI1

  输出:拉低NSS 片选从设备(此时若配置为软件模式,作用对象是什么?)

 

其它设置:

  • 数据长度:8位或16位
  • 高位先还是低位先

关于中断(类似于串口):

  • 发送:当发送缓冲器中的数据传输到移位寄存器时,SPI_SP寄存器的TXE标志被设置,表示内部的发送缓冲器可以接收下一个数据
  • 接收:当移位寄存器中的数据传送到接收缓冲器时,SPI_SR 寄存器中的RXNE标志被设置

 

posted @ 2014-04-25 21:15  熄灯就睡  阅读(669)  评论(0编辑  收藏  举报