《STM32从零开始学习历程》——SPI特性及架构
生活随笔
收集整理的這篇文章主要介紹了
《STM32从零开始学习历程》——SPI特性及架构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
《STM32從零開始學習歷程》@EnzoReventon
SPI特性及架構
相關鏈接:
SPI物理層及FLASH芯片介紹
SPI協議層
SPI固件庫
參考資料:
[野火EmbedFire]《STM32庫開發實戰指南——基于野火霸天虎開發板》
[正點原子]STM32F4開發指南-庫函數版本_V1.2
[ST]《STM32F4xx中文參考手冊》
SPI協議及總線協議介紹
W25Q128產品數據手冊
STM32的SPI外設簡介
- STM32的SPI外設可用作通訊的主機及從機,支持最高的SCK時鐘頻率為fpclk/2 (STM32F407型號的芯片默認fpclk2為84MHz,fpclk1為42MHz),完全支持SPI協議的4種模式,數據幀長度可設置為8位或16位,可設置數據MSB先行或LSB先行。
- 它還支持雙線全雙工、雙線單向(兩根數據線都做發送或者接收模式)以及單線模式。
- 本文為以STM32F407為實驗對象,經查閱手冊,該芯片有3個SPI通訊接口,具體引腳請查閱手冊。
STM32的SPI架構剖析
時鐘控制邏輯
SCK 線的時鐘信號,由波特率發生器根據“控制寄存器CR1”中的BR[0:2] 位控制,該位是對fpclk時鐘的分頻因子,對fpclk 的分頻結果就是SCK 引腳的輸出時鐘頻率,計算方法見下表。
| 000 | fpclk/2 | 100 | fpclk/32 |
| 001 | fpclk/4 | 101 | fpclk/64 |
| 010 | fpclk/8 | 110 | fpclk/128 |
| 011 | fpclk/16 | 111 | fpclk/256 |
數據控制邏輯
SPI的MOSI及MISO都連接到數據移位寄存器上,數據移位寄存器的數據來源來源于接收緩沖區及發送緩沖區。
- 通過寫SPI的“數據寄存器DR”把數據填充到發送緩沖區中。
- 通過讀“數據寄存器DR”,可以獲取接收緩沖區中的內容。
- 其中數據幀長度可以通過“控制寄存器CR1”的“DFF位”配置成8位及16位模式;配置“LSBFIRST位”可選擇**MSB(高位先行)先行還是LSB(低位先行)**先行。
整體控制邏輯
- 整體控制邏輯負責協調整個SPI外設,控制邏輯的工作模式根據“控制寄存器(CR1/CR2)”的參數而改變,基本的控制參數包括前面提到的SPI模式、波特率、LSB先行、主從模式、單雙向模式等等。
- 在外設工作時,控制邏輯會根據外設的工作狀態修改“狀態寄存器(SR)”(TXE,RXNE),只要讀取狀態寄存器相關的寄存器位,就可以了解SPI的工作狀態了。
- 除此之外,控制邏輯還根據要求,負責控制產生SPI中斷信號、DMA請求及控制NSS信號線。
- 實際應用中,一般不使用STM32 SPI外設的標準NSS信號線,而是更簡單地使用普通的GPIO,軟件控制它的電平輸出,從而產生通訊起始和停止信號。
- SSM軟件從器件管理,SSM取1時,使能軟件從器件管理,SSM取0時,禁止軟件從器件管理。SSM為1時,可以隨意指定一個GPIO引腳用來產生開始或者停止信號而非只能選用有SSM功能的引腳,使用靈活。
通訊過程
橙色:表示發送數據
黃色:表示發送標志,TXE的狀態
紫色:表示接受標志,RXNE的狀態
綠色:表示MISO輸入
- 內核向數據寄存器SPI_DR寫入0xF1,數據寫入到發送緩沖區,移位寄存器將數據一位一位的發送出去。
- TXE=1(由于第一次數據傳輸,移位寄存器為空,數據很快的能夠傳輸到移位寄存器中),表示數據寄存器為空,此時可以寫入第二個數據進入發送緩沖區,等待轉移至移位寄存器(此時TXE=0,表示移位寄存器還在發送數據中,非空),即等待TXE再次等于1。
- 接下來的數據傳輸按照上述步驟重復執行,等待移位寄存器將數據發送結束,接受新的數據,等待發送。
- 與發送過程一致,接收數據的標志位為RXNE,當RNXE為1時可以從數據寄存器中讀取接收到的數據。
沒有往SPI_DR寄存器寫入數據的話,SCK將不會產生時鐘,因此如果想要讀取數據,就必須向SPI_DR寄存器寫入數據。
總結
以上是生活随笔為你收集整理的《STM32从零开始学习历程》——SPI特性及架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将Navicat右键表【对象信息】-【D
- 下一篇: Liquid Telecom推出泛非Wi