SPI-NSS
SPI的NSS分为软件模式和硬件模式。
个人理解(大家可以互相讨论一下):
软件模式:就是通过普通GPIO去控制NSS的高低电平。
硬件模式:就是NSS连接的引脚使能复用功能,该引脚就不能作为一个普通IO来使用了,因为绑定了外设。
硬件nss
硬件NSS又分为hard_input和hard_output,即硬件NSS的输入输出模式。
hard_input模式
- 主模式
SPI主模式,SPI配置为Master,NSS配置为hard_input,NSS需要接一个GPIO去提供高电平(主模式NSS需持续为高,主NSS不与从NSS连接),然后正常配置数据发送(该模式下使能SPI接收中断可能会有问题,改原因暂时还未解决)。 - 从模式
SPI从模式,SPI配置为Slave,NSS配置为hard_input,NSS需要接一个GPIO去提供低电平(从模式NSS持续为低),使能接收中断,再中断函数中去给主机应答数据。
hard_output模式
该模式只能用作主机,SPI配置为Master,NSS配置为hard_output,NSS引脚与从机NSS连接。
- 主机NSS无上拉电阻情况
使能SPI外设后,主机的NSS持续拉低,不会变高,就算关闭SPI外设也没作用(有人说这是ST的BUG,但是我没找到相关资料,有资料的朋友可以评论分享下,谢谢!)。 - 主机NSS加上拉电阻情况
使能SPI外设后,主机的NSS拉低,关闭SPI外设后,NSS拉高。
软件NSS
软件NSS-主/从模式
配置SPI为Master/Slave,NSS配置为NSS_Soft,主机NSS引脚与从机NSS引脚连接,此时主机的NSS可以随意连接GPIO,与NSS绑定的GPIO也可用作普通IO使用,正常通过GPIO高点电平控制NSS低电平就可以对从机进行选中,然后进行通信。
- 我没有试软件NSS(SPI_CR1的位9:SSM=1时),然后控制SPI_CR1的位8:SSI的1/0去控制NSS。