- UID
- 1029342
- 性别
- 男
|
之前也是对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的值取代。 |
|