STM32CubMX自学笔记(八)---SPI通信协议

STM32CubMX自学笔记(七)—SPI通信实验

主要介绍

SPI通信协议主要用在ADC芯片、FLASH芯片读取与写入、LCD等设备中。

SPI物理层的介绍

SPI一共有四根线,分别是时钟信号线(SCK)、主设备输出\从设备输入(MOSI)、主设备输入\从设备输出(MISO)、片选信号线(NSS)。
需要注意的是,SPI的最高通信速率由总线上的最低速的设备决定的。

SPI协议层介绍

STM32CubMX自学笔记(八)---SPI通信协议_第1张图片
当SPI的NSS信号线给出一个低电平,发出了起始信号。当SPI的NSS信号线发出高电平,那么相当于是终止信号。表示本次通信结束。
之后在上升沿触发信号,表示在每次上升沿的时候发生触发信号,到下一次的下降沿的时候触发采样信号。最后拉高电平,表示完整的通信过程的结束。

SPI的工作模式

STM32CubMX自学笔记(八)---SPI通信协议_第2张图片
STM32CubMX自学笔记(八)---SPI通信协议_第3张图片

SPI的工作模式由CPOL/CPHA决定,由于每个位置有两种状态,因此,一共有四种状态。CPOL=0表示空闲状态为低电平,反之,空闲状态为高电平。CPHA=0的时候表示会在SCK的奇数边被采样,反之,则表示在偶数边被采样。常用的是模式是模式0和模式3。分别表示如下:
模式0-CPOL=0,CPHA=0。(低电平,奇数边)
模式3-CPOL=1,CPHA=1。(高电平,偶数边)。

工程配置

打开Cubmx软件,开始配置工程,首先打开时钟和调试器。打开SPI。
STM32CubMX自学笔记(八)---SPI通信协议_第4张图片这里我们选择全双工的工作模式,片选信号控制选择软件控制。由软件将片选信号的电平拉低或者拉高。
然后再看下面的具体参数的配置,首先,我们将帧格式选择为摩托罗拉的格式。
数据的传输位选择8位。
第一个传输的数据选择MSB,高位先传输。
数据传输的格式和不同的外设有关可以查找具体的数据手册。
下面是时钟的设置,时钟源来自于APB2。在时钟配置的时候,我们已经将时钟拉满180Mhz,APB2产生的时钟为90Mhz,所以最高的时钟频率为45Mhz。

STM32CubMX自学笔记(八)---SPI通信协议_第5张图片
之后 我们把工作模式配置为工作模式0,对应的是奇数边,低电平。
默认不开启CRC校验,然后NSS使用软件调节。
全部配置完成之后,就可以看到软件自动帮我们生成了初始化的代码。

void MX_SPI1_Init(void)
{
     
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
     
    Error_Handler();
  }
}

到此,SPI工程配置完成。具体通信的使用则是用到了SPI读取串行FLASH。
详细参照野火资料。

你可能感兴趣的:(STM32,stm32,单片机,arm)