stm32 SPI架构
STM32 芯片集成了專門用于 SPI 協議通訊的外設。
通訊引腳:SPI 硬件架構從 MOSI、MISO、SCK 及 NSS 線展開;STM32 芯片有多個 SPI 外設,它們的 SPI 通訊信號引出到不同的 GPIO 引腳上,使用時必須配置到這些指定的引腳。
SPI1是APB2上的設備,最高通信速率36Mbtis/s,SPI2、SPI3 是 APB1上的設備,最高通信速率18Mbits/s。
SPI3 用到了下載接口的引腳,這幾個引腳默認功能是下載,如果想使用 SPI3 接口,則程序必須禁用這幾個IO 口的下載功能。
了解stm32 SPI架構,主要了解的是寄存器之間運作的聯系。
控制寄存器(CR1/CR2):
整體控制邏輯負責協調整個SPI 外設,控制邏輯的工作模式通過控制寄存器(CR1/CR2)的參數改變,基本的控制參數包括SPI 模式、波特率、LSB 先行、主從模式、單雙向模式等。數據幀長度可以通過控制寄存器 CR1的DFF 位配置 成 8 位及 16 位模式。
通過配置控制寄存器CR的CPOL 位、CPHA位,可以把 SPI 設置成4 種 SPI 模式之一。
SCK 線的時鐘信號,由波特率發生器根據控制寄存器 CR1中的 BR[0:2]位控制,該位是對 fpclk時鐘的分頻因子,對 fpclk的分頻結果就是 SCK 引腳的輸出時鐘頻率。 fpclk頻率是指 SPI 所在的 APB 總線頻率,APB1 為 fpclk1,APB2 為 fpckl2。
數據寄存器(DR):寫 SPI 的數據寄存器 DR,可以把數據填充到發送緩沖區;讀數據寄存器DR,可以獲取接收緩沖區中的內容。
數據移位寄存器:
SPI 的 MOSI 及 MISO 都連接到數據移位寄存器上。
當向外發送數據的時候,數據移位寄存器以發送緩沖區為數據源,把數據一位一位地通過數據線發送出去。
當從外部接收數據的時候, 數據移位寄存器把數據線采樣到的數據一位一位地存儲到接收緩沖區中。
狀態寄存器(SR):在外設工作時,控制邏輯會根據外設的工作狀態修改狀態寄存器(SR),只要讀取狀態寄存器相關的寄存器位,就可以了解 SPI 的工作狀態。控制邏輯還根據要求,負責控制產生 SPI 中斷信號、DMA 請求及控制 NSS 信號線。實際應用中,一般不使用 STM32 SPI 外設的標準NSS 信號線,而是使用普通的 GPIO,軟件控制它的電平輸出,從而產生通訊起始和停止信號。
下面是CPOL=1、CPPHA=1時的主模式示例(雙線全雙工),CPOL=1 時, SCK 在空閑狀態時為高電平;CPHA=1 時,數據信號在 SCK 的偶數邊沿被采樣。(配置控制寄存器CR的CPOL 位、CPHA位)
首先控制 NSS 信號線,產生起始信號;
把要發送的數據寫入到數據寄存器DR中,該數據會被存儲到發送緩沖區;
數據移位寄存器:通訊開始,SCK 時鐘開始運行。MOSI 把發送緩沖區中的數據一位一位地傳輸出去;MISO 則把數據一位一位地存儲進接收緩沖區中。
(狀態寄存器 SR中有TXE標志位、RXNE標志位)
TEX標志:TXE標志位置 1,表示傳輸完一幀,發送緩沖區已空。TXE 標志位為 1 時,若還要繼續發送數據,則再次往數據寄存器DR寫入數據即可。
RXNE標志:RXNE 標志位被置 1,表示當接收完一幀數據,接收緩沖區非空。RXNE標志位為1時,通過讀取數據寄存器 DR可以獲取接收緩沖區中的內容。
假如使能了 TXE 或 RXNE 中斷,TXE 或 RXNE 置 1 時會產生 SPI 中斷信號,進入同一個中斷服務函數。可通過檢查寄存器位來了解是哪一個事件,再分別進行處理。也可以使用 DMA 方式收發數據寄存器 DR中的數據。
總結
以上是生活随笔為你收集整理的stm32 SPI架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: latex 图片大小_用LaTeX写作业
- 下一篇: linux安装版本的python,lin