STM32 硬體SPI主從通訊

2021-09-27 12:51:07 字數 1856 閱讀 8961

本例子基於stm32f103zet6晶元,實現spi1與spi2的主從通訊。其中spi1配置為主機,spi2配置為從機,均配置為全雙工模式。硬體連線圖:

其中,我們需要注意的是,spi的從機不能主動傳送資料,只能應答資料。本例子的資料互動過程:

主機使用查詢方式傳送資料給從機。

從機使用中斷接收方式接收資料,把接收到的資料加上0x05再傳送給主機。

從機總是在收到主機的資料時,才會傳送資料給從機。即從機被動傳送資料,也即主機主動申請資料。

主函式:

int main(void)	}	

return 0;

}

其中,ucspi1_rxbufucspi1_txbuf的定義為:

uint8_t ucspi1_rxbuf[spi_buf_len]=;

uint8_t ucspi1_txbuf[spi_buf_len]

=;

spi1_readwritebyte函式為spi1的讀寫函式,其作用是往spi1傳送緩衝區寫入資料的同時可以讀取spi1接收緩衝區中的資料,其內部實現為:

uint8_t spi1_readwritebyte

(uint8_t txdata)

為什麼可以這麼寫呢?看一下spi的框圖:

從框圖可看出spi有 2 個緩衝區,乙個用於寫入(傳送緩衝區),乙個用於讀取(接收緩衝區)。對資料暫存器執行寫操作時,資料將寫入傳送緩衝區,從資料暫存器執行讀取時,將返回接收緩衝區中的值。這樣寫並不會出現讀到的資料等於傳送的資料。

spi2中斷函式:

void

spi2_irqhandler

(void

)/* 清中斷標誌 */

spi_i2s_clearitpendingbit

(spi2, spi_i2s_it_rxne);}

}

從機接收到主機資料後,會加上0x05,再返還給主機。

spi1初始化函式:

void

bsp_spi1_init

(void

)

spi1配置為主模式,全雙工。

spi2初始化函式:

void

bsp_spi2_init

(void

)

spi2配置為從模式,全雙工,使能接收中斷。

可見,與我們前面分析的一致,ucspi2_rxbuf為從機接收自主機的資料;ucspi1_rxbuf為主機接收自從機的資料。這裡發現ucspi1_rxbuf的所有陣列元素都往後移了乙個單位,那是因為主機第一次傳送資料給從機的時候,從機並沒有資料返還給主機,即此時還沒有資料儲存在ucspi1_rxbuf[0]中。

STM32 SPI主從通訊

分享乙個大神的人工智慧教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到人工智慧的隊伍中來!我的 我的知乎 獲取更多資訊。主機 訪問密碼 7bb6 從機 訪問密碼 fd5a 訪問密碼 ca90 測試原理及現象 主機間隔500ms傳送10個字元 0 9 從機開啟spi中斷接收資料,接收滿10...

STM32之間SPI通訊

這幾天實驗室比較忙,所以部落格這邊停了一下,繼續吧。繼串列埠中斷後,大家可以嘗試微控制器間串列埠通訊,這裡就不再多贅述。串列埠完了之後,我接著學的就是spi通訊了,作為hello moto公司推出的這種4線全雙工通訊,很節約pcb布局空間,但缺點就是沒有指定的流控制,沒有應答機制來確定訊號收到與否,...

STM32通訊介面(三)硬體SPI

spi是序列外設介面 serial peripheral inte ce 的縮寫。spi,是一種高速的,全雙工,同步的通訊匯流排,是motorola最先在其的mc68hcxx晶元上使用,並且在晶元的管腳上只占用四根線,節約了晶元的管腳,同時為pcb的布局上節省空間,提供方便,正是出於這種簡單易用的特...