博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32系列之SPI_NSS的理解
阅读量:2054 次
发布时间:2019-04-28

本文共 1018 字,大约阅读时间需要 3 分钟。

之前也是对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的值取代。

转载地址:http://whdlf.baihongyu.com/

你可能感兴趣的文章
阿里云《云原生》公开课笔记 第九章 应用存储和持久化数据卷:核心知识
查看>>
linux系统 阿里云源
查看>>
国内外helm源记录
查看>>
牛客网题目1:最大数
查看>>
散落人间知识点记录one
查看>>
Leetcode C++ 随手刷 547.朋友圈
查看>>
手抄笔记:深入理解linux内核-1
查看>>
内存堆与栈
查看>>
Leetcode C++《每日一题》20200621 124.二叉树的最大路径和
查看>>
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part2:流程控制语句:for、if、else、switch 和 defer
查看>>
Go语言学习Part3:struct、slice和映射
查看>>
Go语言学习Part4-1:方法和接口
查看>>
Leetcode Go 《精选TOP面试题》20200628 69.x的平方根
查看>>
Leetcode C++ 剑指 Offer 09. 用两个栈实现队列
查看>>
Leetcode C++《每日一题》20200707 112. 路径总和
查看>>