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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/1/1 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《STM32从零开始学习历程》——SPI特性及架构 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

《STM32從零開始學(xué)習(xí)歷程》@EnzoReventon

SPI特性及架構(gòu)

相關(guān)鏈接:
SPI物理層及FLASH芯片介紹
SPI協(xié)議層
SPI固件庫

參考資料:
[野火EmbedFire]《STM32庫開發(fā)實(shí)戰(zhàn)指南——基于野火霸天虎開發(fā)板》
[正點(diǎn)原子]STM32F4開發(fā)指南-庫函數(shù)版本_V1.2
[ST]《STM32F4xx中文參考手冊(cè)》
SPI協(xié)議及總線協(xié)議介紹
W25Q128產(chǎn)品數(shù)據(jù)手冊(cè)

STM32的SPI外設(shè)簡(jiǎn)介

  • STM32的SPI外設(shè)可用作通訊的主機(jī)及從機(jī),支持最高的SCK時(shí)鐘頻率為fpclk/2 (STM32F407型號(hào)的芯片默認(rèn)fpclk2為84MHz,fpclk1為42MHz),完全支持SPI協(xié)議的4種模式,數(shù)據(jù)幀長(zhǎng)度可設(shè)置為8位或16位,可設(shè)置數(shù)據(jù)MSB先行或LSB先行。
  • 它還支持雙線全雙工、雙線單向(兩根數(shù)據(jù)線都做發(fā)送或者接收模式)以及單線模式。
  • 本文為以STM32F407為實(shí)驗(yàn)對(duì)象,經(jīng)查閱手冊(cè),該芯片有3個(gè)SPI通訊接口,具體引腳請(qǐng)查閱手冊(cè)。

STM32的SPI架構(gòu)剖析

  • ①為通訊引腳,連接到外部設(shè)備,引腳的介紹可以查看:《SPI物理層》。
  • ②為波特率發(fā)生器,用來產(chǎn)生時(shí)鐘
  • ③為數(shù)據(jù)控制邏輯,與I2C結(jié)構(gòu)類似:內(nèi)核將數(shù)據(jù)寫入到發(fā)送緩沖區(qū),使用移位寄存器將數(shù)據(jù)一位一位的經(jīng)過MOSI發(fā)送出去;MISO接收數(shù)據(jù)寫入到移位寄存器中,接收緩沖區(qū)將移位寄存器中的數(shù)據(jù)轉(zhuǎn)移到數(shù)據(jù)總線中。
  • ④為整體控制邏輯,SPI_CR2為控制寄存器;SPI_SR為狀態(tài)寄存器;TXE發(fā)送緩沖區(qū)為空;RXNE接收緩沖區(qū)為非空;BR2\BR1\BR0為波特率寄存器,控制波特率。
  • 時(shí)鐘控制邏輯

    SCK 線的時(shí)鐘信號(hào),由波特率發(fā)生器根據(jù)“控制寄存器CR1”中的BR[0:2] 位控制,該位是對(duì)fpclk時(shí)鐘的分頻因子,對(duì)fpclk 的分頻結(jié)果就是SCK 引腳的輸出時(shí)鐘頻率,計(jì)算方法見下表。

    BR[0:2]分頻結(jié)果(SLK頻率)BR[0:2]分頻結(jié)果(SLK頻率)
    000fpclk/2100fpclk/32
    001fpclk/4101fpclk/64
    010fpclk/8110fpclk/128
    011fpclk/16111fpclk/256

    數(shù)據(jù)控制邏輯

    SPI的MOSI及MISO都連接到數(shù)據(jù)移位寄存器上,數(shù)據(jù)移位寄存器的數(shù)據(jù)來源來源于接收緩沖區(qū)及發(fā)送緩沖區(qū)。

    • 通過寫SPI的“數(shù)據(jù)寄存器DR”把數(shù)據(jù)填充到發(fā)送緩沖區(qū)中。
    • 通過讀“數(shù)據(jù)寄存器DR”,可以獲取接收緩沖區(qū)中的內(nèi)容。
    • 其中數(shù)據(jù)幀長(zhǎng)度可以通過“控制寄存器CR1”的“DFF位”配置成8位及16位模式;配置“LSBFIRST位”可選擇**MSB(高位先行)先行還是LSB(低位先行)**先行。

    整體控制邏輯

    • 整體控制邏輯負(fù)責(zé)協(xié)調(diào)整個(gè)SPI外設(shè),控制邏輯的工作模式根據(jù)“控制寄存器(CR1/CR2)”的參數(shù)而改變,基本的控制參數(shù)包括前面提到的SPI模式、波特率、LSB先行、主從模式、單雙向模式等等。
    • 在外設(shè)工作時(shí),控制邏輯會(huì)根據(jù)外設(shè)的工作狀態(tài)修改“狀態(tài)寄存器(SR)”(TXE,RXNE),只要讀取狀態(tài)寄存器相關(guān)的寄存器位,就可以了解SPI的工作狀態(tài)了。
    • 除此之外,控制邏輯還根據(jù)要求,負(fù)責(zé)控制產(chǎn)生SPI中斷信號(hào)、DMA請(qǐng)求及控制NSS信號(hào)線。
    • 實(shí)際應(yīng)用中,一般不使用STM32 SPI外設(shè)的標(biāo)準(zhǔn)NSS信號(hào)線,而是更簡(jiǎn)單地使用普通的GPIO,軟件控制它的電平輸出,從而產(chǎn)生通訊起始和停止信號(hào)。
    • SSM軟件從器件管理,SSM取1時(shí),使能軟件從器件管理,SSM取0時(shí),禁止軟件從器件管理。SSM為1時(shí),可以隨意指定一個(gè)GPIO引腳用來產(chǎn)生開始或者停止信號(hào)而非只能選用有SSM功能的引腳,使用靈活。

    通訊過程


    橙色:表示發(fā)送數(shù)據(jù)
    黃色:表示發(fā)送標(biāo)志,TXE的狀態(tài)
    紫色:表示接受標(biāo)志,RXNE的狀態(tài)
    綠色:表示MISO輸入

  • 發(fā)送過程:
    • 內(nèi)核向數(shù)據(jù)寄存器SPI_DR寫入0xF1,數(shù)據(jù)寫入到發(fā)送緩沖區(qū),移位寄存器將數(shù)據(jù)一位一位的發(fā)送出去。
    • TXE=1(由于第一次數(shù)據(jù)傳輸,移位寄存器為空,數(shù)據(jù)很快的能夠傳輸?shù)揭莆患拇嫫髦?#xff09;,表示數(shù)據(jù)寄存器為空,此時(shí)可以寫入第二個(gè)數(shù)據(jù)進(jìn)入發(fā)送緩沖區(qū),等待轉(zhuǎn)移至移位寄存器(此時(shí)TXE=0,表示移位寄存器還在發(fā)送數(shù)據(jù)中,非空),即等待TXE再次等于1。
    • 接下來的數(shù)據(jù)傳輸按照上述步驟重復(fù)執(zhí)行,等待移位寄存器將數(shù)據(jù)發(fā)送結(jié)束,接受新的數(shù)據(jù),等待發(fā)送。
  • 接收過程:
    • 與發(fā)送過程一致,接收數(shù)據(jù)的標(biāo)志位為RXNE,當(dāng)RNXE為1時(shí)可以從數(shù)據(jù)寄存器中讀取接收到的數(shù)據(jù)。

    沒有往SPI_DR寄存器寫入數(shù)據(jù)的話,SCK將不會(huì)產(chǎn)生時(shí)鐘,因此如果想要讀取數(shù)據(jù),就必須向SPI_DR寄存器寫入數(shù)據(jù)。

    總結(jié)

    以上是生活随笔為你收集整理的《STM32从零开始学习历程》——SPI特性及架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。