STM32 學習筆記 SPI通訊配置

2021-07-26 12:29:14 字數 1589 閱讀 7093

spi時序圖如下:

stm32做為主機設計spi時序一般選用cpol=1/cpha=1;

1、時鐘使能。gpio時鐘使能rcc->apb2enr,spi時鐘使能rcc->apb2enr設定。

(為什麼還要連線gpio時鐘,參見stm32參考手冊8.1.4節。手冊上這麼說的:對於復用輸出功能,埠必須配置成復用功能輸出模式(推挽或開漏)。)

2、配置gpio工作模式。配置gpio片選,由軟體管理(即自定義引腳),推挽輸出,上拉;

配置spi引腳sck、mosi、miso所用到的引腳為復用功能;gpiox->cr1 gpiox->odr;

3、spi設定工作模式。通過配置spix->cr1來設定spi 的工作模式。配置工作模式為全雙工,主機模式,sck閒時電平為高,第二個時鐘沿(上公升沿)取樣資料,內部從機選擇軟體管理模式。設定spi的時鐘頻率(最大18mhz),設定資料格式(msb在前還是lsb在後),內部從機選擇設定為主機(置1)。

4、使能spi,啟動傳輸。

5,因為spi是同步輸入輸出的,在傳送資料的時候已經在接受資料。通過檢測spix->sr第一位的狀態來決定要進行傳送和接受資料。通過讀取spix->dr位的來傳送和接受資料。

spix->sr暫存器圖:

spix->dr暫存器圖

程式如下:

#include

"spi.h"

//spi口初始化

//這裡針是對spi1的初始化

void spi1_init(void)

//spi1 速度設定函式

//speedset:0~7

//spi速度=fapb2/2^(speedset+1)

//apb2時鐘一般為72mhz

void spi1_setspeed(u8 speedset)

//spi1 讀寫乙個位元組

//txdata:要寫入的位元組

//返回值:讀取到的位元組

u8 spi1_readwritebyte(u8 txdata)

spi1->dr=txdata; //傳送乙個byte

retry=

0;

while((spi1->sr&

1<<

0)==

0) //等待接收完乙個byte

return spi1->dr; //返**到的資料

}

STM32之間SPI通訊

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

STM32筆記 SPI通訊

相對於上次說的iic,這次我們來回憶一下spi,之前並沒有過多深入了解spi協議,所以這次再來記錄一下,首先附上資料裡的spi定義 spi,是英語 serial peripheral inte ce 的縮寫,顧名思義就是序列外圍裝置介面。spi,是一種高速的,全雙工,同步的通訊匯流排,並且在晶元的管...

STM32 硬體SPI主從通訊

本例子基於stm32f103zet6晶元,實現spi1與spi2的主從通訊。其中spi1配置為主機,spi2配置為從機,均配置為全雙工模式。硬體連線圖 其中,我們需要注意的是,spi的從機不能主動傳送資料,只能應答資料。本例子的資料互動過程 主機使用查詢方式傳送資料給從機。從機使用中斷接收方式接收資...