STM32—cubeMX+HAL庫的SPI接口使用


STM32之SPI簡介:

(1)SPI協議【Serial Peripheral Interface】

 串行外圍設備接口,是一種高速全雙工的通信總線。主要用在MCU與FLASH\ADC\LCD等模塊之間的通信。

(2)SPI信號線

 SPI 共包含 4 條總線。

SS(Slave Select):片選信號線,當有多個SPI 設備與 MCU 相連時,每個設備的這個片選信號線是與 MCU 單獨的引腳相連的,而其他的 SCK、MOSI、MISO 線則為多個設備並聯到相同的 SPI 總線上,低電平有效。

SCK (Serial Clock):時鍾信號線,由主通信設備產生,不同的設備支持的時鍾頻率不一樣,如 STM32 的 SPI 時鍾頻率最大為 f PCLK /2。

MOSI (Master Output Slave Input):主設備輸出 / 從設備輸入引腳。主機的數據從這條信號線輸出,從機由這條信號線讀入數據,即這條線上數據的方向為主機到從機。

MISO(Master Input Slave Output):主設備輸入 / 從設備輸出引腳。主機從這條信號線讀入數據,從機的數據則由這條信號線輸出,即在這條線上數據的方向為從機到主機。

下圖是主器件與多個從器件通信圖。其中SCK,MOSI,MISO是接在一起的,NSS分別接到不同的IO管腳控制。主器件要和從器件通信就先拉低對應從器件的NSS管腳使能。默認狀態IO1,IO2,IO3全為高電平,當主器件和從器件1通信時,拉低IO1管腳使能從器件1。而從器件2,3不使能,不作響應。

(3)SPI特性

  • 單次傳輸可選擇為 8 或 16 位。

  • 波特率預分頻系數(最大為 fPCLK/2) 。

  • 時鍾極性(CPOL)和相位(CPHA)可編程設置。

  • 數據順序的傳輸順序可進行編程選擇,MSB 在前或 LSB 在前。

  • 注:MSB(Most Significant Bit)是“最高有效位”,LSB(Least Significant Bit)是“最低有效位”。

  • 可觸發中斷的專用發送和接收標志。

  • 可以使用 DMA 進行數據傳輸操作。

如上圖,MISO數據線接收到的信號經移位寄存器處理后把數據轉移到接收緩沖區,然后這個數據就可以由我們的軟件從接收緩沖區讀出了。

當要發送數據時,我們把數據寫入發送緩沖區,硬件將會把它用移位寄存器處理后輸出到 MOSI數據線。

SCK 的時鍾信號則由波特率發生器產生,我們可以通過波特率控制位(BR)來控制它輸出的波特率。

控制寄存器 CR1掌管着主控制電路,STM32的 SPI模塊的協議設置(時鍾極性、相位等)就是由它來制定的。而控制寄存器 CR2則用於設置各種中斷使能。

最后為 NSS引腳,這個引腳扮演着 SPI協議中的SS片選信號線的角色,如果我們把 NSS引腳配置為硬件自動控制,SPI模塊能夠自動判別它能否成為 SPI的主機,或自動進入 SPI從機模式。但實際上我們用得更多的是由軟件控制某些 GPIO引腳單獨作為SS信號,這個 GPIO引腳可以隨便選擇。

(4)SPI時鍾時序

根據時鍾極性(CPOL)及相位(CPHA)不同,SPI有四種工作模式。

時鍾極性(CPOL)定義了時鍾空閑狀態電平:

CPOL=0為時鍾空閑時為低電平

CPOL=1為時鍾空閑時為高電平

時鍾相位(CPHA)定義數據的采集時間。

CPHA=0:在時鍾的第一個跳變沿(上升沿或下降沿)進行數據采樣。

CPHA=1:在時鍾的第二個跳變沿(上升沿或下降沿)進行數據采樣。

cubeMX軟件配置SPI:

下面繼續介紹cubeMX軟件配置STM32L152的SPI接口方法。

(1)打開軟件,選擇對應芯片后,配置好時鍾源;

(2)勾選SPI1為全雙工,硬件NSS關閉,如下圖:

(3)勾選好后,PA5、PA6、PA7如下圖,在配置PA4為普通io口,gpio_output

(4)SPI1的參數配置選擇默認,如下圖所示

————————————————
版權聲明:本文為CSDN博主「夜風~」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u014470361/article/details/79015712


免責聲明!

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



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