关于stm32 SPI通信协议的简单总结

spi,uart,iic协议之间的对比:

spi和uart的区别,spi结构上可以实现一主多从进行通信,依靠时钟进行传输数据的同步传输模式。

SPI和iic都是一主多从进行通信的,同样需要依靠时钟完成数据的同步 传输,iic选中从机进行通信依靠发送从机的地址,而spi选中

从机开始通信则是需要主机拉低对应外设的片选信号。

iic与spi的时钟频率都是由主机来控制的,Iic实际应用的传输速度是10k~400khz,spi的传输速递最大是fclk/2;

但是关于传输速度的选择实际上还是要依靠通信的外部设备决定。

带控制器的设备uart,spi,can,iic等协议的通信中可以扮演主设备或者从设备的角色,是主设备还是从设备是相对的。

1,物理层

spi的物理连接方式:

关于stm32 SPI通信协议的简单总结_第1张图片

SCK:串口时钟,作为主设备的输出,从设备的输入

MOSI:通常用作主机的输出引脚(master out slave in),在从模式下接收数据。

MISO:通常用作主机的输入引脚(master in slave out),在从模式下发送数据。

SSx:片选引脚,使能某个外部设备

在spi的连接图中可以看出spi通信是全双工的同步通信,但是在芯片手册中也规定spi可以采用单工通信的方式仅发送或接收(双线或单线);

注意,spi 在成功发送数据之前一定要拉低片选线。

SPI能够以两种配置工作于单工方式: (文章中对这种模式并不进行分析)

● 1条时钟线和1条双向数据线

● 1条时钟线和1条数据线(双工模式下只读方式)

关于stm32 SPI通信协议的简单总结_第2张图片

Stm32f103中spi的引脚接线情况:

关于stm32 SPI通信协议的简单总结_第3张图片

2,协议层

 

在协议中可以选择LSB先行或者MSB先行模式,只要主设备与从设备设置的模式一致即可。

 

片选信号的使能可以选择配置为软件模式和硬件模式两种,常用的是软件模式。

 

设备可以选择配置成主模式还是从模式,区别是配置成主模式的设备要配置时钟。

 

时钟的时序图:

关于stm32 SPI通信协议的简单总结_第4张图片

通过设置spi的时钟时钟相位和时钟极型,可以得到四种时序模式。如下图:

关于stm32 SPI通信协议的简单总结_第5张图片

当cpol设置为0,scl的空闲时的电平是低电平;

当cpol设置为1,scl的空闲时的电平是高电平;

当cpha设置为0,在时钟的奇数边沿进行数据采样。

当cpha设置为1,在时钟的偶数边沿进行数据采样。

 

上述的协议图中,常用的时序模式是mode0和mode3;

以mode0的时序为例:

关于stm32 SPI通信协议的简单总结_第6张图片

因为cpol设置为0,当scl为低电平时保持空闲状态,当cs片选线拉低,scl产生时钟信号;

因为cpha设置为0,当时钟scl线上产生第一个跳变沿电平(下降沿)时,触发信号。

3,逻辑框图

关于stm32 SPI通信协议的简单总结_第7张图片

在逻辑框图中可以看出,

要发送的数据经由地址与数据总线,发送到tx寄存器,转移到发送移位寄存器通过MISO引脚,发送给外部设备。

接收的数据通过MOSI引脚转移到接收移位寄存器,控制器通过总线读取接收数据寄存器,读出接收到的数据。

 

在主设备的模式下还需要配置时钟的频率,涉及到的相关的寄存器如上图所示。

 

4,代码

spi的初始:

关于stm32 SPI通信协议的简单总结_第8张图片

关于stm32 SPI通信协议的简单总结_第9张图片

通过spi读写一个字节:

关于stm32 SPI通信协议的简单总结_第10张图片

注意:用spi协议从设备中读取一个数据,是需要先向从设备中 发送一个数据,启动时钟。

具体其他代码去看正点历程或野火的历程也是很好的选择呢……因为要去运动了,剩下的代码就不贴了.....

你可能感兴趣的:(关于stm32 SPI通信协议的简单总结)