STM32筆記 SPI通訊

2021-08-20 17:13:15 字數 1835 閱讀 8616

相對於上次說的iic,這次我們來回憶一下spi,之前並沒有過多深入了解spi協議,所以這次再來記錄一下,首先附上資料裡的spi定義:

spi,是英語 serial peripheral inte***ce 的縮寫,顧名思義就是序列外圍裝置介面。spi,是一種高速的,全雙工,同步的通訊匯流排,並且在晶元的管腳上只占用四根線,節約了晶元的管腳,同時為 pcb 的布局上節省空間,提供方便,正是出於這種簡單易用的特性,現在越來越多的晶元整合了這種通訊協議。

spi 是乙個環形匯流排結構,由 ss(cs)、sck、sdi、sdo 構成,其時序其實很簡單,主要是在 sck 的控制下,兩個雙向移位暫存器進行資料交換。

上公升沿傳送、下降沿接收、高位先傳送。

上公升沿到來的時候,sdo 上的電平將被傳送到從裝置的暫存器中。

下降沿到來的時候,sdi 上的電平將被接收到主裝置的暫存器中。

spi 匯流排是 motorola 公司推出的三線同步介面,同步序列 3 線方式進行通訊:一條時鐘線 sck,一條資料輸入線 mosi,一條資料輸出線 miso;用於 cpu 與各種外圍器件進行全雙工、同步序列通訊。spi 主要特點有:可以同時發出和接收序列資料;可以當作主機或從機工作;提供頻率可程式設計時鐘;傳送結束中斷標誌;寫衝突保護;匯流排競爭保護等。

spi 匯流排有四種工作方式(sp0, sp1, sp2, sp3),其中使用的最為廣泛的是 spi0 和 spi3 方式。

spi 模組為了和外設進行資料交換,根據外設工作要求,其輸出序列同步時鐘極性和相位可以進行配置,時鐘極性(cpol)對傳輸協議沒有重大的影響。如果 cpol=0,序列同步時鐘的空閒狀態為低電平;如果 cpol=1,序列同步時鐘的空閒狀態為高電平。時鐘相位(cpha)能夠配置用於選擇兩種不同的傳輸協議之一進行資料傳輸。如果 cpha=0,在序列同步時鐘的第乙個跳變沿(上公升或下降)資料被取樣;如果 cpha=1,在序列同步時鐘的第二個跳變沿(上公升或下降)資料被取樣。 spi 主模組和與之通訊的外設音時鐘相位和極性應該一致。

spi 時序圖詳解---spi 介面在模式 0 下輸出第一位資料的時刻

spi 介面有四種不同的資料傳輸時序,取決於 cpol 和 cphl 這兩位的組合。圖 1 中表現了這四種時序,時序與 cpol、cphl 的關係也可以從圖中看出。

cpol 是用來決定 sck 時鐘訊號空閒時的電平,cpol=0,空閒電平為低電平,cpol=1 時,空閒電平為高電平。cpha 是用來決定取樣時刻的,cpha=0,在每個週期的第乙個時鐘沿取樣,cpha=1,在每個週期的第二個時鐘沿取樣。

由於我使用的器件工作在模式 0 這種時序(cpol=0,cpha=0),所以將圖 1 簡化為圖 2,只關注模式 0 的時序。

spi的四種模式:

筆者個人還是認為iic更加簡單方便,spi的通訊比較複雜(個人認為,我也看到其他人說iic比較複雜),且使用引腳比較多,但是spi的資料傳輸速率還是更快一點,所以各有利弊,在實際工程中還要斟酌。

void spi_flash_init(void)

#define spi_flash_cs_high()      gpio_setbits(gpioa, gpio_pin_4)

void spi_cmd(spi_typedef* spix, functionalstate newstate)

else

}

STM32筆記記錄

串列埠記錄 stm32有好幾個串列埠。比如說stm32f103zet6有5個串列埠,串列埠1的引腳對應的io為pa9,pa10.pa9,pa10預設功能是gpio,所以當pa9,pa10引腳作為串列埠1的tx,rx引腳使用的時候,那就是埠復用。復用埠初始化有幾個步驟 1 gpio埠時鐘使能。要使用到...

STM32筆記之USART串列埠通訊

第五章 usart串列埠通訊 總結 開始!開始!微控制器的usart串列埠除錯。一 usart rx 接收 tx 傳送 如下 示例 include usart.h 中斷優先順序的配置,包含在mise.h標頭檔案中 static void nvic cinfig void usart配置 void u...

STM32之間SPI通訊

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