spi是序列外設介面(serial peripheral inte***ce)的縮寫。spi,是一種高速的,全雙工,同步的通訊匯流排,
是motorola最先在其的mc68hcxx晶元上使用,
並且在晶元的管腳上只占用四根線,節約了晶元的管腳,同時為pcb的布局上節省空間,提供方便,正是出於這種簡單易用的特性,如今越來越多的晶元整合了這種通訊協議。
spi介面主要應用在實時時鐘、e2prom、flash、ad轉換器還有數字訊號處理器和數碼訊號解碼器之間,它的用途相當廣泛。而且其傳輸速度較快一般可以達到10m以上。
二、基本原理
由圖可知spi一般由四條線組成:miso(主機輸入從機輸出)、mosi(主機輸出從機輸入)、sclk(時鐘線)、cs(片選訊號)
四線模式的spi支援全雙工,如果把miso和mosi合為一條資料線,就變成了三線spi,只支援半雙工。
主機的資料通過移位暫存器傳輸給從機時,從機的資料也會通過它的移位暫存器傳輸給主機
示例:(從最低位開始)
主機 從機
00000000 11111111
第乙個時鐘週期 00000001 11111110
第二個時鐘週期 00000011
11111100
......
第八個時鐘週期 11111111 00000000
所以說每次的資料傳輸就相當於主機從機的資料進行交換
由此,如果要傳輸資料給從機,主機只要忽略掉從從機接收到的資料即可,如果要從從機讀取資料,就可以傳送無意義的資料給從機(如0x00)
注意:大多數情況下傳送和接收並不會同時進行。
三、stm32上的spi
stm32 上的spi介面提供倆個功能,支援spi協議和i2s音訊協議,預設情況下,選擇的是spi功能。可通過軟體將介面從spi切換到i2s。
stm32上spi的特性如下
spi的框圖如下:
這個框圖並不複雜,主要要關注的就是miso和mosi那裡。
資料匯流排中的資料寫入傳送緩衝區,通過移位暫存器一位一位的從mosi傳送,同時從機返回的資料從miso進入移位暫存器,進入接收緩衝區。
下面的部分就是波特率發生器,主控制邏輯以及通訊控制。
注意:
cpol(時鐘極性)決定spi介面傳輸時時鐘空閒狀態的電平(1,高電平;0,低電平)
cpha(時鐘相位)控制在時鐘的第乙個還是第二個邊沿被採集(1,第二個邊沿,0,第乙個邊沿)
四、stm32 上spi的實現流程
1、配置相關引腳的復用功能,使能spi時鐘
2、設定spi的工作模式
3、使能spi
**如下:
初始化函式
void spi1_init(void)
這裡對spi1進行初始化,首先使能io口的時鐘,初始化io口味復用功能,復用為spi1,。首先先復位spi1,設定為全雙工模式,軟體從器件管理,內部從器件選擇,作為主機,八位資料格式,空閒狀態高電平,第二個時間邊沿開始取樣,設定波特率256分頻,從最高位開始傳輸,使能spi。
再選擇spi模式(i2scfgr暫存器的第11位)
傳送乙個位元組啟動傳輸
傳輸速度設定函式
//spi1速度設定函式
//speedset:0~7
//spi速度=fapb2/2^(speedset+1)
//fapb2時鐘一般為84mhz
void spi1_setspeed(u8 speedset)
通過改變分頻係數來設定spi的傳輸速度
讀寫乙個位元組
//spi1 讀寫乙個位元組
//txdata:要寫入的位元組
//返回值:讀取到的位元組
u8 spi1_readwritebyte(u8 txdata)
txdate為要傳送的位元組,函式的返回值為接收到的位元組
五、使用spi
在使用spi時先將片選訊號拉低選中從器件,然後傳送或者接收資料,完成後,拉高片選。
隨後的部落格會通過w25q128的使用來介紹spi的使用。
STM32 硬體SPI主從通訊
本例子基於stm32f103zet6晶元,實現spi1與spi2的主從通訊。其中spi1配置為主機,spi2配置為從機,均配置為全雙工模式。硬體連線圖 其中,我們需要注意的是,spi的從機不能主動傳送資料,只能應答資料。本例子的資料互動過程 主機使用查詢方式傳送資料給從機。從機使用中斷接收方式接收資...
STM32之間SPI通訊
這幾天實驗室比較忙,所以部落格這邊停了一下,繼續吧。繼串列埠中斷後,大家可以嘗試微控制器間串列埠通訊,這裡就不再多贅述。串列埠完了之後,我接著學的就是spi通訊了,作為hello moto公司推出的這種4線全雙工通訊,很節約pcb布局空間,但缺點就是沒有指定的流控制,沒有應答機制來確定訊號收到與否,...
STM32通訊介面(二)IIC 軟體模擬
一 概述 iic 即inter integrated circuit 積體電路匯流排 這種匯流排型別是由 飛利浦半導體公司在八十年代初設計出來的一種簡單 雙向 二線制 同步序列匯流排,主要是用來連線整體電路 ics iic是一種多向 控制匯流排 也就是說多個晶元可以連線到同一 匯流排結構 下,同時每...