首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

STM32系列之SPI_NSS的理解

STM32系列之SPI_NSS的理解

之前也是对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的值取代。
继承事业,薪火相传
返回列表