? ? 看了STM32的SPI章节,感觉用户手册没有把NSS讲得很清楚,网上也搜了一些资料,现在总结一下前人的经验:? ?? ?? ?? ?? ?
? ? 下图是STM32F103用户手册截的图,当我们忽略NSS引脚相关寄存器操作的时候(此时SSM=0,工作在硬件模式),要想SPI工作在Master模式下,必须给予NSS引脚高电平;同理,当想要SPI工作在Salve模式下,必须给予NSS引脚低电平;
? ? ?然后ST为了节约外部资源,设置了和NSS相关的寄存器位--SSM位、SSI位、SSOE位。 ? ? SSM位:软件从设备管理(也就是软件模式和硬件模式选择)。当SSM被置位时,NSS引脚上的电平由SSI位的值决定。 ? ? SSI位:内部从设备选择。该位只在SSM位为’1’时有意义。它决定了NSS上的电平,在NSS引脚上的I/O操作无效 ? ? SSOE位:SS输出使能,用来决定是否允许内部NSS信号送出的NSS引脚上。 ? ? 用自己的话来理解SSM、SSI,内部的NSS由外部的NSS信号或者SSI位电平提供。当外部IO引脚没有电平输入的时候,我们想要SPI作为Master,我们就可以通过设置SSM=1、SSI=1来选择SPI作为Master;同理,当我们想要设置SPI作为Salve的时候,再不接外部NSS电平的情况下,我们可以通过设置SSM=1、SSI=0来选择SPI作为Salve。
? ? 总结:NSS分为硬件模式和软件模式,硬件模式是设置SMM位为0,内部的NSS信号由外部的IO引脚送入;而软件模式则是设置SSM位为1,内部的NSS信号根据SSI位的状态送入。
? ? 什么是多主模式呢? ? ? 如下图所示,SSOE=0的时候,禁止在主模式下SS输出,该设备可以工作在多主设备模式;SSOE=1的时候,设备开启时,开启主模式下SS输出,该设备不能工作在多主设备模式。
? ? 下图是STM32关于SPI在多主模式下的解释
? ? 这里摘抄https://blog.csdn.net/yangkuiwu/article/details/74058965,CSDN博主「老羊快跑」的原创文章对多主模式的解释,希望对大家有用: ? ? “如果是硬件模式,并且SSOE等于1,那么NSS引脚电平可以送入内部NSS,内部NSS也可以通过输出控制单元送到NSS引脚上,就可以实现对从设备的控制了。NSS引脚在工作时会出现低电平,可以打开外部从设备。如果SSOE等于0,这时内部NSS信息就无法送到NSS引脚了,那不是无法控制从设备了么?对,此时NSS引脚就无法控制从设备了,不过如果有其他的主设备将NSS引脚拉低,那么此时SPI就自动进入了从模式,可以接收数据了,实现了多主模式下(比如两个STM32通过SPI进行通信,都可能是主设备)的功能切换。”?
|