NSS:从器件选择,即可作输入也可作输出。主机(master)利用此引脚选择需要通信的从机(slave)。感觉这个概念较复杂,本人阅读了一些文章后写下自己的见解,如有不对请指出。另外,本文默认片选低电平使能,我不太清楚有没有高电平使能的设备。。。。。。

首先让我们看看NSS的结构图,其中最重要的是左侧标红的NSS引脚和右侧标红的内部NSS。对于主机,其内部NSS需要被设置为高电平;对于需要通信的从机,其内部NSS应为低电平。

0. 英文缩写

        SSM:软件从设备管理 (Software slave management)

        SSI:内部从设备选择 (Internal slave select)

        SSOE:SS输出使能 (SS output enable)

        MSTR:主设备选择 (Master selection)

1. 主机寄存器配置

1.1 软件从设备管理(SPI_CR1寄存器的SSM置1)

1.1.1 NSS输入

根据官方文档,当SSM被置1时,NSS input 的电平由 SSI bit 的值决定(官方文档翻译的不准确,困扰我很久),这个很好理解,就是那个数据选择器选择来自SSI bit的输入。那么SSI bit该怎么设置呢?我在查看了官方库函数发现:

void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);

SPI_InitStructure.SPI_Mode = SPI_Mode_Master;

#define SPI_Mode_Master                 ((uint16_t)0x0104)

将STM32配置为主机会将SSI bit置1(上面的红色数字,对应SPI_CRI寄存器的第8位),那么现在 NSS input 就被设置为了1,Internal nss 被设置为1,STM32被配置为主设备。

1.1.2 NSS输出

在配置输出前,我们需要知道一般1个主设备需要管理多个从设备,在某一时刻主机只能与一个从机通信。

(1)通过任意一个GPIO来控制(SSM = 1, SSOE = 0)

假如我们有10个设备,那么我们可以将这10个设备的片选(chip slect)引脚与STM32的10个引脚相连,我们如果想要和某个设备通信,只需将这个设备的CS拉低,其他设备的CS保持高电平就可以了。

如果采用GPIO控制片选的话,NSS引脚就自由了,它也可以当作普通GPIO用了。

(2)通过SPI的NSS引脚控制(SSM = 1, SSOE = 1)

此模式不存在,因为软件从设备管理(SSM为1)时无法控制NSS引脚的输出(看图中的那行英文字)。所以对于软件从设备管理,主机想要选择从机只能通过GPIO。另外,手动将需要通信的从机的片选拉低也行,但不推荐。

1.2 硬件从设备管理(SPI_CR1寄存器的SSM置0)

1.2.1 NSS输入

当SSM被置0时,NSS input 的电平由NSS引脚决定。前面我们讨论过,对于主机,其内部NSS需要被设置为高电平。那么这个输入就一定为高电平,例如将NSS引脚通过上拉电阻连接VCC。

1.2.2 NSS输出

(1)允许NSS输出(SSM = 0, SSOE = 1)

此配置仅在设备以主模式运行时使用。当主机启动通信时,NSS引脚被驱动为低电平,并且在SPI被禁用之前一直处于低电平。

作为硬件从设备管理的主机,要求NSS引脚为高电平;当开始通信后,NSS又被拉低。这里我不太懂,请大家帮我看看。

(2)禁止NSS输出(SSM = 0, SSOE = 0)

此配置允许在主模式下运行的设备具有多主功能。此时应采用GPIO控制从机的片选。

2. 从机寄存器配置

2.1 软件从设备管理(SPI_CR1寄存器的SSM置1)

此时 NSS input 的信号来自于 SSI bit,且 SSI bit 必须设置为0。要不然都是主机,通信个毛啊......

2.2 硬件从设备管理(SPI_CR1寄存器的SSM置0)

此时 NSS input 的信号由NSS引脚决定,从机可以受控于其他主设备。

3. 使用推荐

个人觉得选择软件从器件管理还比较简单,只需把SSM置1,并用GPIO控制片选就可以了(概念清晰,其他模式把我都绕晕了)。

最后,有时候还是得看英文文档啊,虽然看的头都大了......

关于STM32中SPI硬件的NSS配置相关推荐

  1. stm32中spi可以随便接吗_STM32的SPI模式读写FLASH芯片全面讲解

    例程完整代码: SPI协议简介 SPI协议,即串行外围设备接口,是一种告诉全双工的通信总线,它被广泛地使用在ADC,LCD等设备与MCU间通信的场合. SPI信号线 SPI包含4条总线,分别为SS,S ...

  2. stm32中spi可以随便接吗_stm32之SPI通信协议实例详解

    之前一直对SPI通信一知半解,所以想抽空把它搞得明白一些.考虑到之前是结合Flash芯片来学的,十分不直观,而且主要把时间和精力都花在Flash芯片的datasheet和驱动上了,SPI通信也没学好. ...

  3. 关于STM中SPI运用的NSS引脚解读

    STM的NSS引脚        首先我们说该引脚有两个电平需要注意,一个是与NSS引脚连接的外部电平,一个是NSS引脚的内部电平.        然后我们知道在SPI通信的时候master必须在NS ...

  4. STM32中独立看门狗的配置

    我自己使用的是独立看门狗由内部专门的 32Khz 低速时钟(LSI)驱动.主要自己查手册看LSI是多少就是多少. LL库中的配置:void MX_IWDG_Init(void) { /* Enable ...

  5. stm32中常见的通信协议之SPI

    目录 1.SPI总线 2.SPI的寻址方式 3.SPI的工作原理总结 4.SPI的通讯过程 5.SPI的极性和相位 6.IIC和SPI的异同 7.stm32中SPI配置中常用的寄存器 8.stm32中 ...

  6. 【STM32】SPI的基本原理、库函数(SPI一般步骤)

    STM32F1xx官方资料: <STM32中文参考手册V10>-第23章 串行外设接口SPI SPI的基本介绍 SPI的简介 SPI,是英语Serial Peripheral interf ...

  7. STM32:SPI 与 TFT

    STM32系列博客:  STM32学习之旅① 开发环境搭建 STM32学习之旅② 固件库的使用及工程模板的建立 STM32学习之旅③ 从点灯到代码移植 STM32学习之旅④ USART串口和上位机通信 ...

  8. stm32中实现printf打印

    起因 最近在调试stm32片子,在调试的时候发现,原来的项目代码中没有实现printf函数,一直使用较为原始的打印方式:将需要打印的内容存在数组中(下称资源池),通知DMA进行搬运,最终通过usart ...

  9. STM32硬件SPI使用与nSS的理解

    最近在调试硬件SPI,之前使用软件模拟方式,为了提高速度,选择该方式进行替换. 花了一些时间了解寄存器跟库函数直接调用,结果要么读取不出数据(陷入等待TXE,RXNE死循环)或读取数据为0xffff, ...

最新文章

  1. tensorflow兼容处理 tensorflow.compat.v1 tf.contrib
  2. ​老男孩教育每日一题-第105天-Linux如何设置每天凌晨三点重启nginx服务
  3. 如何设置SQL Server 全文搜索
  4. 关于RF中类似于异常(TRY语句)情况的处理
  5. 高校数字化建设到底该如何推进?这篇方案值得一看
  6. mysql timestamp 差值_MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法(两个日期之间的差值)...
  7. 第五十期:详解语音识别技术的发展
  8. 用java编写日历添加窗口一角_Java 实训4 编写一个窗体程序显示日历
  9. VS code 调试配置01 Debugging
  10. html引vue怎么实现国际化,Vue项目中Vue-i18n和element-ui国际化开发实现过程_唇印_前端开发者...
  11. 苏宁易购上半年营收936.06亿元,零售云加盟店新开1381家
  12. java中单,单|的意思,按位操作符详述
  13. 30. 与所有单词相关联的字串
  14. windows下的csrss.exe进程
  15. Linux线程详解(概念、原理、实现方法、优缺点)
  16. HDOJ--1162--Eddy's picture
  17. 关于企业邮箱域名备案方法【企业邮箱申请】
  18. android 获取wifi的ip地址吗,Android开发实现在Wifi下获取本地IP地址的方法
  19. 【Spark重点难点】你从未深入理解的RDD和关键角色
  20. Let‘sEncrypt快速颁发及自动续签泛域名证书实践指南

热门文章

  1. 数据可视化:处理json文件
  2. EMLOG采集插件 采集资源 小刀模板采集通用
  3. matlab sym转str,sym struct 转换
  4. Synchronized解析——一层一层剥开洋葱的心
  5. neditor本地上传音频一
  6. 模具腐蚀皮纹工艺原理及其流程
  7. 如何安装Redis?
  8. 【C语言】函数基础知识点总结
  9. 【松岩论道】一个道理说明股市人的发展不是靠江湖式的随机跳跃分析!
  10. 这个季节,想到了什么