關於stm32 SPI通信協議的簡單總結

spi,uart,iic協議之間的對比:

spi和uart的區別,spi結構上可以實現一主多從進行通信,依靠時鐘進行傳輸數據的同步傳輸模式。

SPI和iic都是一主多從進行通信的,同樣需要依靠時鐘完成數據的同步 傳輸,iic選中從機進行通信依靠發送從機的地址,而spi選中

從機開始通信則是需要主機拉低對應外設的片選信號。

iic與spi的時鐘頻率都是由主機來控制的,Iic實際應用的傳輸速度是10k~400khz,spi的傳輸速遞最大是fclk/2;

但是關於傳輸速度的選擇實際上還是要依靠通信的外部設備決定。

帶控制器的設備uart,spi,can,iic等協議的通信中可以扮演主設備或者從設備的角色,是主設備還是從設備是相對的。

1,物理層

spi的物理連接方式:

SCK:串口時鐘,作爲主設備的輸出,從設備的輸入

MOSI:通常用作主機的輸出引腳(master out slave in),在從模式下接收數據。

MISO:通常用作主機的輸入引腳(master in slave out),在從模式下發送數據。

SSx:片選引腳,使能某個外部設備

在spi的連接圖中可以看出spi通信是全雙工的同步通信,但是在芯片手冊中也規定spi可以採用單工通信的方式僅發送或接收(雙線或單線);

注意,spi 在成功發送數據之前一定要拉低片選線。

SPI能夠以兩種配置工作於單工方式: (文章中對這種模式並不進行分析)

● 1條時鐘線和1條雙向數據線

● 1條時鐘線和1條數據線(雙工模式下只讀方式)

Stm32f103中spi的引腳接線情況:

2,協議層

 

在協議中可以選擇LSB先行或者MSB先行模式,只要主設備與從設備設置的模式一致即可。

 

片選信號的使能可以選擇配置爲軟件模式和硬件模式兩種,常用的是軟件模式。

 

設備可以選擇配置成主模式還是從模式,區別是配置成主模式的設備要配置時鐘。

 

時鐘的時序圖:

通過設置spi的時鐘時鐘相位和時鐘極型,可以得到四種時序模式。如下圖:

當cpol設置爲0,scl的空閒時的電平是低電平;

當cpol設置爲1,scl的空閒時的電平是高電平;

當cpha設置爲0,在時鐘的奇數邊沿進行數據採樣。

當cpha設置爲1,在時鐘的偶數邊沿進行數據採樣。

 

上述的協議圖中,常用的時序模式是mode0和mode3;

以mode0的時序爲例:

因爲cpol設置爲0,當scl爲低電平時保持空閒狀態,當cs片選線拉低,scl產生時鐘信號;

因爲cpha設置爲0,當時鍾scl線上產生第一個跳變沿電平(下降沿)時,觸發信號。

3,邏輯框圖

在邏輯框圖中可以看出,

要發送的數據經由地址與數據總線,發送到tx寄存器,轉移到發送移位寄存器通過MISO引腳,發送給外部設備。

接收的數據通過MOSI引腳轉移到接收移位寄存器,控制器通過總線讀取接收數據寄存器,讀出接收到的數據。

 

在主設備的模式下還需要配置時鐘的頻率,涉及到的相關的寄存器如上圖所示。

 

4,代碼

spi的初始:

通過spi讀寫一個字節:

注意:用spi協議從設備中讀取一個數據,是需要先向從設備中 發送一個數據,啓動時鐘。

具體其他代碼去看正點歷程或野火的歷程也是很好的選擇呢……因爲要去運動了,剩下的代碼就不貼了.....

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章