代码之家  ›  专栏  ›  技术社区  ›  Muzahir Hussain

在主机(SPI)中设置nss\U soft

  •  4
  • Muzahir Hussain  · 技术社区  · 8 年前

    我想使用NucleoSTM32F103RB在master中将NSS引脚设置为软件模式。但我有一些问题?

    在参考手册中,他们说,

    在NSS软件模式下,在SPI\U CR1寄存器中设置SSM和SSI位。如果输出模式中需要NSS引脚,则应仅设置SSOE位。

    现在

    为什么需要用SSM设置SSI位?

    SSOE bit的目的是什么?

    1 回复  |  直到 8 年前
        1
  •  5
  •   followed Monica to Codidact    8 年前

    这与很少使用的多主机通信有关。

    在多主机设置中,NSS信号控制对SPI总线的访问。不幸的是,ST文档有点模糊,但我的理解是

    • NSS高输入意味着总线空闲,您可以传输
    • NSS低输入意味着其他人正在传输,您将成为一个奴隶。

    为什么需要用SSM设置SSI位?

    如果 SSM ( S 软件 S 洗涤 M 管理)位设置为主模式,然后 SSI ( S 洗涤 S 选举 INTERNAL)位成为NSS信号源,而不是引脚。背景 SSI公司 1 允许主机传输,将其设置为 0 使其成为从属(清除 MSTR 钻头插入 CR1 ).

    如果只有一个主控形状,只需设置

    SPI->CR1 = SPI_CR1_MSTR | SPI_CR1_SPE | SPI_CR1_SSM | SPI_CR1_SSI
    

    其余的不用担心。这是最灵活的方式,您可以通过单独连接到CS线的GPIO输出控制任意多个从机。您也可以将NSS引脚用作GPIO。

    SSOE bit的目的是什么?

    它将NSS引脚更改为输出。最初设置为高,当控制器开始传输时(当 DR 寄存器写入)。请注意,传输完成后,它不会再次自动变高,而是通过设置 SPI_CR1_SPE 0 .

    使用 SSOE 当单个主设备与单个从设备通信时,这可能很有用,因为CS由SPI寄存器控制。根本不需要与GPIO外围设备通信,就不需要将其基址加载到寄存器并保存在那里,从而在闪存中节省了一些周期和几个字节,从而可以通过优化编译器将寄存器用于其他用途。