我想使用 Nucleo STM32F103RB 在主机中将 NSS 引脚设置为软件模式。但我有一些问题?
在参考手册中,他们说,
在 NSS 软件模式下,设置 SPI_CR1 寄存器中的 SSM 和 SSI 位。如果在输出模式下需要 NSS 引脚,则只需设置 SSOE 位。
现在,
为什么我们需要用 SSM 设置 SSI 位?
SSOE位的用途是什么?
我想使用 Nucleo STM32F103RB 在主机中将 NSS 引脚设置为软件模式。但我有一些问题?
在参考手册中,他们说,
在 NSS 软件模式下,设置 SPI_CR1 寄存器中的 SSM 和 SSI 位。如果在输出模式下需要 NSS 引脚,则只需设置 SSOE 位。
现在,
为什么我们需要用 SSM 设置 SSI 位?
SSOE位的用途是什么?
这与很少使用的多主通信有关。
在多主机设置中,NSS 信号控制对 SPI 总线的访问。不幸的是,ST文档在那里有点模糊,但我的理解是
为什么我们需要用 SSM 设置 SSI 位?
如果SSM
( S oftware Slave Management )位设置为主机模式,则( Slave Slect Internal ) 位将成为 NSS 信号源,而不是引脚。设置为允许主机发送,设置为使其成为从机(清除 中的位)。SSI
SSI
1
0
MSTR
CR1
如果你有一个主人,只需设置
SPI->CR1 = SPI_CR1_MSTR | SPI_CR1_SPE | SPI_CR1_SSM | SPI_CR1_SSI
不要担心其余的。这是最灵活的方式,您可以使用单独连接到 CS 线路的 GPIO 输出来控制任意数量的从机。您也可以将 NSS 引脚用作 GPIO。
SSOE位的用途是什么?
它将 NSS 引脚更改为输出。最初设置为高电平,当控制器开始发送时(DR
写入寄存器时),它变为低电平。请注意,传输完成后它不会再次自动变高,而是通过设置SPI_CR1_SPE
为0
。
当单个主机与单个从机通信时,使用SSOE
可能很有用,因为 CS 由 SPI 寄存器控制。根本不必与 GPIO 外围设备通信,无需将其基址加载到寄存器并将其保存在那里,从而在闪存中节省了一些周期和几个字节,从而可以通过以下方式将寄存器用于其他用途优化编译器。