STM32之spi管理模式


 

1)sip管理模式分為:硬件管理和軟件管理;主要由NSS 、SSI、SSM決定;

  NSS是芯片上一個實實在在的引腳,SSI和SSM是SPI_CR1控制器里的的位。

  值得注意的是:NSS分外部引腳和內部引腳的。外部NSS引腳當然就是與GPIO 共用的引腳,芯片上可以肉眼看到這個引腳;內部NSS引腳就是STM32芯片里集成的SPI模塊引腳,我們肉眼是看不見的它的,換句話說,真正與SPI通信控制器連接的是內部NSS引腳,外部NSS引腳不能直接連到芯片內部的SPI模塊,而是先連接內部NSS引腳,通過內部NSS引腳作用SPI模塊。

  

2)基本概述:

  位SSM在SPI_CR1控制器里默認為0;

 

  SSM可以控制內部NSS引腳與SSI(一個寄存器,軟件模式)相連,還是與NSS外部引腳(真正的STM32引腳,硬件模式)相連。真正作用的是內部NSS引腳(內部NSS引腳才真正連接到SPI通信控制器上)

  當SSM=0,說明使用硬件管理模式,此時NSS有效,內部NSS引腳與外部NSS引腳相連,忽視SSI位,對SPI_CR1的 SSI位 的寫操作無效;

  當SSM=1,說明使用軟件管理模式,此時SSI位有效,內部NSS引腳與SSI相連,忽視外部NSS引腳,我們可以把外部NSS引腳當做普通IO口;

 

3)配置:

SPI從模式的配置(MSTR=0)
1.硬件模式:SSM=0,當外部NSS為低電平時,內部NSS也為低電平,此時可以傳送數據。

      外部NSS引腳必須作為輸入模式,此引腳就成為了該器件的片選引腳:

        外部NSS引腳設置為復用功能+無上下拉,外部NSS引腳需要手動連接一個低電平,此時可以傳送數據,低電平必須維持到SPI關閉為此,相當片選該從器件;

        外部NSS引腳設置為復用功能+無上下拉,外部NSS引腳手動連接一個高電平,內部NSS引腳被外部高電平拉高,此時不可以轉送數據,因為相當取消從器件的片選;
2.軟件模式:SSM=1,並SSI=0.STM32芯片讓內部NSS引腳為低電平,此時可以傳送數據。

      外部NSS引腳被釋放,可做普通IO作為其他用途使用。

SPI主模式的配置(MSTR=1)

1.硬件模式:SSM=0  
   A:輸入模式:SSOE=0,在外部NSS引腳為高電平,即內部NSS引腳也為高電平時,才能進行數據傳輸。 如果要使能從設備,還需要一個GPIO引腳。

    在此情況下,外部NSS要是被接低電平,則會進入主模式故障,MSTR會清零,由主模式進入從模式。

    外部NSS引腳需要配置為復用+無上下拉,且外部NSS引腳必須接入一個高電平,它才能維持主模式狀態。
   B:輸出模式:SSOE=1, 外部NSS引腳會被芯片自動輸出低電平,使能從設備,進行數據傳輸。 不需要額外的GPIO引腳就能控制從設備。     

    外部NSS引腳需要配置為復用功能,再把此引腳連接從器件的CS引腳,因為此情況下,外部NSS引腳就相當於片選引腳了。 

2.軟件模式:SSM=1,SSI=1,將內部NSS引腳設置為高電平。這樣隨時可以傳輸數據。當然多數情況還需要一個GPIO引腳輸出低電平,來使能從設備,讓從設備可以接收數據。   

3.需要注意的是,SSOE位必須在主模式下配置才有效。它的作用是在硬件管理的主模式下是否開啟外部NSS引腳的輸入、輸出模式。這是芯片手冊上說的。 

 

綜上所述,NSS引腳就是片選CS引腳是很不負責任的說法。

本人也是參考下面此文章,此作者前半部分講的非常好,但不能全信此作者講,特別是他所寫的后半部分,有些個人認為還是有些缺陷:

https://blog.csdn.net/andylauren/article/details/52259703

 

 

SPI_CR2  :

 

SPI_CR1:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM