STM32的SPI

一、SPI功能描述

SPI的框图如下:
在这里插入图片描述
SPI通过4个引脚与外部器件相连:

  • MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
  • MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
  • SCK:串口时钟,作为主设备的输出,从设备的输入
  • NSS:从设备选择。这是一个用来选择从设备的(可选的)引脚。这个引脚用来作为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上发生冲突。从设备的NSS引脚作为输入引脚可以由主设备的一个标准I/O引脚来驱动。如果使能了SSOE位(SPI_CR2[2])NSS引脚也可以作为输出引脚,在SPI处于主模式时将其拉低,此时,所有的NSS引脚连接到主设备的NSS引脚的SPI设备,则会检测到低电平就会自动进入从设备状态(如果它们被设置为NSS硬件模式)。当配置为主设备且NSS配置为输入引脚(MSTR=1,SSOE=0)时,如果NSS被拉低,则这个SPI设备进入主模式失败状态:即MSTR位被自动清除,此设备进入从模式

二、配置SPI为主模式

主模式时,在SCK脚产生串行时钟。
SPI为主模式配置步骤:

  1. 通过SPI_CR1寄存器的BR[2:0]位定义串行时钟波特率。
  2. 选择CPOL和CPHA位,定义数据传输和串行时钟间的相位关系。
  3. 设置DFF位来定义8位或16位数据帧格式。
  4. 配置SPI_CR1寄存器的LSBFIRST位定义帧格式。
  5. NSS硬件输入模式下,需要NSS引脚工作在输入模式,在整个数据帧传输期间应把NSS脚连接到高电平;
    NSS软件输入模式下,需设置SPI_CR1寄存器的SSM位和SSI位。
    如果NSS引脚工作在输出模式,则只需设置SSOE位。
  6. 设置MSTR位(设置为主模式)、设置SPE位(SPI使能)。(只当NSS脚被连到高电平,这些位才能保持置位)。

三、配置SPI为从模式

从模式下,SCK引脚用于接收从主设备来的串行时钟。
SPI为从模式配置步骤:

  1. 设置DFF位以定义数据帧格式为8位或16位。
  2. 选择CPOL和CPHA位来定义数据传输和串行时钟之间的相位关系。
  3. 帧格式(SPI_CR1寄存器中的LSBFIRST位定义的”MSB在前”还是”LSB在前”)必须与主设备相同。
  4. NSS硬件模式下(参考从选择(NSS)脚管理部分),在完整的数据帧(8位或16位)传输过程中,NSS引脚必须为低电平。
    NSS软件模式下,设置SPI_CR1寄存器中的SSM位并清除SSI位。
  5. 清除MSTR位(设置为从模式)、设置SPE位(SPI使能),使相应引脚工作于SPI模式下。
发布了62 篇原创文章 · 获赞 13 · 访问量 5572

猜你喜欢

转载自blog.csdn.net/qq_38113006/article/details/103900031