Arm 在主机(SPI)中设置nss_软件
我想使用NucleoSTM32F103RB在master中将NSS引脚设置为软件模式。但我有一些问题 在参考手册中,他们说 在NSS软件模式下,在SPI_CR1寄存器中设置SSM和SSI位。如果输出模式下需要NSS引脚,则仅应设置SSOE位 现在, 为什么我们需要用SSM设置SSI位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低输入意味
SSOE bit的用途是什么?它与很少使用的多主机通信有关 在多主机设置中,NSS信号控制对SPI总线的访问。不幸的是,ST文档有点模糊,但我的理解是
- NSS高输入意味着总线是免费的,您可以传输
- NSS低输入意味着有人在传输,你变成了一个奴隶
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外设通信,就不需要将其基址加载到寄存器并保存在那里,从而在闪存中节省一些周期和几个字节,从而使优化编译器可以将寄存器用于其他用途