STM32 SPI发送波形
STM32 SPI发送波形
前言
本文主要内容为STM32 的SPI发送波形,不涉及相关软件配置,相关内容网络上一搜就有很多参考。
一、SPI的四种波形
根据SPI协议,STM32发送的波形有四种可能,如图所示,主要分为两种时钟相位(CPHA)和时钟极性(CPOL)。
关于时钟极性,也有很多人把它理解为第一个边沿,第二个边沿:也有人觉得CPHA=0时,时钟是从第一个边沿启动,这样理解不是很准确。其实还有第二种理解方式,那就是它们都是 第
2
T
\cfrac{2}{T}
T2 的边沿信号,如下图所示:
我个人感觉这样比第几个边沿好理解一些。
二、连续和不连续传输
1.连续传输
首先,连续传输或者不连续传输都是针对主设备(Master)而言。连续传输就是指发送完数据后,时钟没有空闲,立即进行下一次传输。如图所示。2.不连续传输
不连续传输和连续传输相反,在完成一次传输之后,时钟会有一段空闲。如图所示。
关于什么情况下是连续传输,什么情况下是间断传输,官方手册有这么一段说明。
大概意思就是,你的软件运行足够快,能够检测到TXE标志,并且立即将数据写入SPI_DR寄存器,那么就可以实现连续传输,否则,就只有间断传输。
然而实际情况就是,无论你是使用轮询方式,或者中断方式,甚至使用寄存器编写程序,也不可能使用软件做到连续传输,除非你将SPI的频率降得很低。
而想要实现连续传输,只要一种方式,那就是使用硬件完成以上操作,也就是使用DMA进行发送数据。
三、实测波形
以下波形是使用HAL库,采用轮询方式发送三个字节(0xaa,0x55,0x34)的波形图。通道1为时钟信号,通道2为MOSI信号。可以看到,每发送一个字节的数据,时钟就会空闲一段时间。
以下波形是使用HAL库,采用DMA方式发送三个字节的波形图,可以看到,24个时钟完全连在一起。
本次实验的SPI配置模式为 CPHA = 0, CPOL = 0,可以看到,刚开始的半个周期,时钟出现了一些毛刺,同时MOSI引脚的数据变为高,这也说明了在CPHA=0时,时间会提前半个周期开始,而不是从第一个边沿信号开始。