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