对STM32的SPI部分NSS的理解

对SPI的理解

  1. 仔细看手册
    (1) 框图
    在这里插入图片描述
    接收和发送只有一个移位寄存器,这是和UART不同的。所以单主机和单从机的接线如下所示,其实连接后是由两个移位寄存器组成的环形链路,收发可同时进行,才叫全双工。
    在这里插入图片描述
    另外,要注意NSS的控制。NSS(Negative Slave Select),意为“低电平有效的从器件选择”信号。从SPI的结构框图中可以看到NSS也是外部引脚的名称,其实控制SPI收发数据时通过内部的NSS信号实现的,而这个内部的NSS信号源可以由SPI_CR1寄存器的SSM(Software slave management)位来配置:
    在这里插入图片描述
    SSM=1,被称为“软件模式”,内部NSS信号电平由SPI_CR1寄存器的SSI位决定。这种模式适合在SPI被配置为主机时使用,配置为主机时需要把SPI_CR1寄存器的MSTR和SPE置1,SSI也置1。
    SSM=0,被称为“硬件模式”,内部NSS信号电平由NSS引脚电平决定。在这种“硬件模式”下要用SPI_CR2的SSOE(Software slave SS output enable)位来控制NSS作为输入还是输出,当SSOE=0时,NSS引脚被配置为输入;当SSOE=0时,NSS引脚被配置为输出。
    (2) 功能描述
    把SPI看做一个环形的数据链路是最好的理解方法,另外SPI的数据还可以通过DMA来管理。关于NSS的配置,网上有人说在主机模式下使用上述的“硬件模式”时NSS引脚无法根据发送数据的情况自动置高或拉低(主机发送数据时自动拉低NSS引脚选通从设备,发送数据结束时又自动置高NSS引脚)。
    当SPI配置为“硬件模式”后,其实是通过检测NSS可以实现的是自身主机和从机模式的切换,而不是大多数人所认为的自动NSS。也就是说:在一个多SPI系统中,SPI通过NSS检测,一旦发现系统中无NSS低信号,自己就输出低,从而成为主机;当系统中有NSS低信号时(及已经有其它SPI宣布为主机),自己就配置为从机。 所谓的“硬件模式”的NSS,实际就是为了实现多机间通信的。所以在手册中关于SSOE的说明才是这样的:
    Bit 2 SSOE: SS output enable
    0: SS output is disabled in master mode and the cell can work in multimaster configuration
    1: SS output is enabled in master mode and when the cell is enabled. The cell cannot work
    in a multimaster environment.
    其实所谓的“自动NSS”叫做“NSS Pulse Mode”,即NSS脉冲模式,这种模式才是网友们所需要的。目前为止我接触过的STM8S,M0,M3,M4中都没有这种功能。而在GD32F350和STM32F7xx中是有“NSS Pulse Mode”模式的。以下是STM32F7xx参考手册中的内容:

    Bit 3 NSSP: NSS pulse management
    This bit is used in master mode only. it allows the SPI to generate an NSS pulse between two
    consecutive data when doing continuous transfers. In the case of a single data transfer, it
    forces the NSS pin high level after the transfer.
    It has no meaning if CPHA = ’1’, or FRF = ’1’.
    0: No NSS pulse
    1: NSS pulse generated
    Note: 1. This bit must be written only when the SPI is disabled (SPE=0).
    2. This bit is not used in I2S mode and SPI TI mode.

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在STM32SPI中,硬件NSS是指通过外部引脚控制片选信号的方式。当SPI配置为主机模式时,可以将NSS引脚设置为输出模式,通过SPI_CR2寄存器的SSOE位来控制。当SSOE为1时,NSS引脚会输出低电平,也就是拉低,从而实现片选功能,将其他SPI设备的NSS引脚与它相连,就可以成功进行片选。而当SPI配置为从机模式时,NSS引脚则可以设置为输入模式,通过SPI_CR1寄存器的SSM位和SSI位来控制。SSM位为1是为了使能软件管理,而SSI位为1是为了使NSS内部电平为高电平。在硬件模式下,保持主机模式时,内部输入的NSS电平必须为高,才能保持MSTR和SPE位为1,即保持主设备状态。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [STM32 SPI 软件NSS和硬件NSS解读](https://blog.csdn.net/m0_46272475/article/details/121152512)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [关于STM32SPI硬件的NSS配置](https://blog.csdn.net/Potatotatotato/article/details/123316929)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值