日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《STM32从零开始学习历程》——SPI特性及架构

發布時間:2024/1/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《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架構剖析

  • ①為通訊引腳,連接到外部設備,引腳的介紹可以查看:《SPI物理層》。
  • ②為波特率發生器,用來產生時鐘
  • ③為數據控制邏輯,與I2C結構類似:內核將數據寫入到發送緩沖區,使用移位寄存器將數據一位一位的經過MOSI發送出去;MISO接收數據寫入到移位寄存器中,接收緩沖區將移位寄存器中的數據轉移到數據總線中。
  • ④為整體控制邏輯,SPI_CR2為控制寄存器;SPI_SR為狀態寄存器;TXE發送緩沖區為空;RXNE接收緩沖區為非空;BR2\BR1\BR0為波特率寄存器,控制波特率。
  • 時鐘控制邏輯

    SCK 線的時鐘信號,由波特率發生器根據“控制寄存器CR1”中的BR[0:2] 位控制,該位是對fpclk時鐘的分頻因子,對fpclk 的分頻結果就是SCK 引腳的輸出時鐘頻率,計算方法見下表。

    BR[0:2]分頻結果(SLK頻率)BR[0:2]分頻結果(SLK頻率)
    000fpclk/2100fpclk/32
    001fpclk/4101fpclk/64
    010fpclk/8110fpclk/128
    011fpclk/16111fpclk/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特性及架构的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。