在Master(SPI)中设置nss_soft

时间:2018-02-18 08:57:07

标签: arm stm32 spi master-slave stm32f1

我想使用Nucleo STM32F103RB将NSS引脚设置为master中的软件模式。但我有一些问题吗?

在参考手册中,他们说,

  

在NSS软件模式下,设置SPI_CR1寄存器中的SSM和SSI位。如果在输出模式下需要NSS引脚,则只应设置SSOE位。

现在,

为什么我们需要用SSM设置SSI位?

SSOE位的目的是什么?

1 个答案:

答案 0 :(得分:4)

它与很少使用的多主通信有关。

在多主设置中,NSS信号控制对SPI总线的访问。不幸的是,ST文档有点模糊,但我的理解是

  • NSS高输入意味着总线空闲,您可以传输
  • NSS低输入意味着其他人正在传输,您成为奴隶。
  

为什么我们需要用SSM设置SSI位?

如果在主模式下设置SSM S 的软件 S lave M 管理)位,则{{ 1}}( S lave S 选择 I nternal)位成为NSS信号的来源而不是引脚。将SSI设置为SSI可让主设备进行传输,将其设置为1使其成为从设备(清除0中的MSTR位。

如果你有一个主人,只需设置

CR1

并且不要担心其余的事情。它是最灵活的方式,您可以根据需要控制尽可能多的从站,并将GPIO输出分别连接到CS线路。您也可以将NSS引脚用作GPIO。

  

SSOE位的目的是什么?

它将NSS引脚更改为输出。最初设置为高电平时,控制器开始发送时(写入SPI->CR1 = SPI_CR1_MSTR | SPI_CR1_SPE | SPI_CR1_SSM | SPI_CR1_SSI 寄存器时)变低。请注意,转移完成后,它不会再次自动变高,而是将DR设置为SPI_CR1_SPE

当单个主设备与单个从设备通信时,使用0会很有用,因为CS由SPI寄存器控制。根本不需要与GPIO外设通信,不需要将其基地址加载到寄存器并将其保存在那里,在闪存中保存一些周期和几个字节,从而可以通过寄存器来使用其他寄存器。优化编译器。