Arm 在主机(SPI)中设置nss_软件

Arm 在主机(SPI)中设置nss_软件,arm,stm32,spi,master-slave,stm32f1,Arm,Stm32,Spi,Master Slave,Stm32f1,我想使用NucleoSTM32F103RB在master中将NSS引脚设置为软件模式。但我有一些问题 在参考手册中,他们说 在NSS软件模式下,在SPI_CR1寄存器中设置SSM和SSI位。如果输出模式下需要NSS引脚,则仅应设置SSOE位 现在, 为什么我们需要用SSM设置SSI位 SSOE bit的用途是什么?它与很少使用的多主机通信有关 在多主机设置中,NSS信号控制对SPI总线的访问。不幸的是,ST文档有点模糊,但我的理解是 NSS高输入意味着总线是免费的,您可以传输 NSS低输入意味

我想使用NucleoSTM32F103RB在master中将NSS引脚设置为软件模式。但我有一些问题

在参考手册中,他们说

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

现在,

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


SSOE bit的用途是什么?

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

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

  • NSS高输入意味着总线是免费的,您可以传输
  • NSS低输入意味着有人在传输,你变成了一个奴隶
为什么我们需要用SSM设置SSI位

如果
SSM
SsoftwareSlaveMmanagement)位设置为主模式,则
SSI
SlaveSelectIinternal)位将成为NSS信号源,而不是引脚。将
SSI
设置为
1
允许主机进行传输,将其设置为
0
使其成为从机(清除
CR1
中的
MSTR
位)

如果只有一个主控台,只需设置

SPI->CR1 = SPI_CR1_MSTR | SPI_CR1_SPE | SPI_CR1_SSM | SPI_CR1_SSI
剩下的就不用担心了。这是最灵活的方式,通过单独连接到CS线路的GPIO输出,您可以控制任意多个从机。您也可以将NSS引脚用作GPIO

SSOE bit的目的是什么

它将NSS引脚更改为输出。最初设置为高,当控制器开始传输时(当
DR
寄存器写入时),它变为低。请注意,传输完成后,它不会自动再次变高,而是通过将
SPI\u CR1\u SPE
设置为
0

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