之前也是对SPI的NSS一头雾水,看其他手册上说的NSS便是片选信号。大多数的SPI从机的片选有用为低电平,当某一从机的NSS引脚为低电平时,该机被选中,就能够和主机经过SPI通讯了。一切的主机和从机其实都有片选信号,只有片选了,才干作业。可是主机的片选是经过软件装备完结的,读完下面的几段,期望能给您说清楚。
在STM32中,当要装备为slave时,只需将它的NSS引脚装备为低电平即可。那么假如要SPI装备为master时,也要装备这个NSS,但此刻装备为SPI_NSS_Soft。终究什么是SPI_NSS_Soft和SPI_NSS_Hard呢?咱们来看一下数据手册的阐明吧:在stm32的spi.h文件里边是这么界说的
#define SPI_NSS_Soft ((uint16_t)0x0200)
#define SPI_NSS_Hard ((uint16_t)0x0000)
它对应的SPI的操控寄存器的第9bit(从第0bit开端数)SSM(Software slave management),数据手册上是这么说的,当SSM为1时,NSS管脚的输入被SSI(空寄存器1的第8bit)值替代;当为0时,对应为外部NSS管脚的状况。
再来看看装备master:
#define SPI_Mode_Master ((uint16_t)0x0104)
#define SPI_Mode_Slave ((uint16_t)0x0000)
从#define SPI_Mode_Master ((uint16_t)0x0104) 这句能够看出装备了第2bit为1,第8bit位为1.在SPI的操控寄存器中,第2bit位是MSTR,当装备这个位为0时,装备SPI为slave形式,假如该位是1,则为master形式。第8bit是SSI(内部从机挑选位),数据手册的阐明是:仅当SSM位为1时,SSI位的值被强制对应到NSS引脚,而此刻NSS引脚I/O寄存器的值被疏忽。当SSI为1时,那么对应的NSS引脚为1,在它内部看来,它被使能了,被装备成了master。
或许有点模糊,什么是NSS引脚,什么是NSS引脚I/O啊?我的了解是,NSS引脚是SPI通讯的信号线之一,它能够不用要地衔接到实在的I/O口上,能够软件置位和复位;而NSS引脚I/O是NSS这个信号线所衔接的外部I/O口。例如上面第三段说的,NSS管脚的输入被SSI的值替代。