系列索引:《嵌入式系統原理與應用》 | 嵌入式系統 重點知識梳理
目錄
SPI的物理層接口及互聯
SPI(Serial Peripheral Interface,串行外圍設備接口),是由摩托羅拉公司提出的一種高速全雙工串行同步通信接口,首先出現在其M68HC系列處理器中。由於其傳輸速度快、簡單方便成本低
物理層接口
主設備和從設備通信之間,主設備片選信號拉高,從設備拉低
互聯
多個並聯,主微控制器花費GPIO引腳作爲片選信號
SPI的時鐘極性及時鐘相位
SPI時序,與其時鐘極性和時鐘相位有關。
時鐘極性 (CPOL):
時鐘線和時鐘極性同高同低
時鐘相位(CPHA):
0奇數,1偶數
SPI的數據格式及傳輸速率
SPI數據格式
SPI數據傳輸也是以幀爲單位,通常可以選擇8位或16位數據幀格式。
SPI數據,可以由高位到低位(即MSB在前LSB在後),也可以由低位到高位(即LSB在前MSB在後)依次傳輸。到底採用什麼數據格式,由具體SPI設備指定。
根據不同的SPI時序(時鐘極性和時鐘相位)和數據格式,SPI數據傳輸實例如下:
SPI時序爲CPOL=0、CPHA=0且數據格式爲8位數據幀、低位在前高位在後傳輸:
SPI時序爲CPOL=0、CPHA=1且數據格式爲8位數據幀、高位在前低位在後傳輸
SPI時序爲CPOL=1、CPHA=0且數據格式爲8位數據幀、低位在前高位在後傳輸
SPI時序爲CPOL=1、CPHA=1且數據格式爲8位數據幀、高位在前低位在後傳輸
(UART低位在前,IIC高位在前)
SPI傳輸速率
SPI具有較高的傳輸速率,它的時鐘SCK最高可達18MHz。
STM32中SPI的特性
通常,它被配置爲主模式,併爲各個從設備提供通信時鐘SCK。
SPI的工作模式、配置步驟及數據收發過程
工作模式
主模式和從模式,主模式和從模式下均可由軟件或硬件進行NSS管理,動態改變主∕從操作模式;
收發過程
在STM32F103微控制器使用SPI發送數據前,程序員完成SPI物理層(如引腳)和協議層(時鐘極性、時鐘相位、數據格式和傳輸速率等)的相關配置,並將數據並行地寫入發送緩衝區,進行SPI數據的收發。
在接收時,接收到的數據被存放在一個內部的接收緩衝器中;在發送時,在被髮送之前,數據將首先被存放在一個內部的發送緩衝器中。對SPI_DR寄存器的讀操作,將返回接收緩衝器的內容;寫入SPI_DR寄存器的數據將被寫入發送緩衝器中。
從模式下開始傳輸
─ 當從設備接收到時鐘信號並且第一個數據位出現在它的MOSI時,數據傳輸開始,隨後的數據位依次移動進入移位寄存器;
─ 與此同時,在傳輸第一個數據位時,發送緩衝器中的數據被並行地傳送到8位的移位寄存器,隨後被串行地發送到MISO引腳上。軟件必須保證在SPI主設備開始數據傳輸之前在發送寄存器中寫入要發送的數據。
主模式下開始傳輸
─ 當寫入數據到SPI_DR寄存器(發送緩衝器)後,傳輸開始;
─ 在傳送第一位數據的同時,數據被並行地從發送緩衝器傳送到8位的移位寄存器中,然後按順序被串行地移位送到MOSI引腳上;
─ 與此同時,在MISO引腳上接收到的數據,按順序被串行地移位進入8位的移位寄存器中,然後被並行地傳送到SPI_DR寄存器(接收緩衝器)中。
SPI的狀態標誌和中斷(兩個重要的:TXE和RXNE)
狀態標誌:
中斷:
不同的SPI,有着不同的中斷向量。而對於同一個SPI,它的各種中斷事件都被連接到同一個中斷向量。
SPI的常用庫函數(初始化設置、收發數據)
SPI_I2S_DeInit:將SPIx的寄存器恢復爲復位啓動時的默認值。
SPI_Init:根據SPI_InitStruct中指定的參數初始化指定SPI的寄存器。
SPI_Cmd:使能或禁止指定SPI。
SPI_I2S_SendData:通過SPI/I2S發送單個數據。
SPI_I2S_ReceiveData:返回指定SPI/I2S最近接收到的數據。
SPI_I2S_GetFlagStatus:查詢指定SPI/I2S的標誌位狀態。
SPI_I2S_ClearFlag:清除指定SPI/I2S的標誌位(SPI_FLAG_CRCERR)。
SPI_I2S_ITConfig:使能或禁止指定的SPI/I2S中斷。
SPI_I2S_GetITStatus:查詢指定的SPI/I2S中斷是否發生。
SPI_I2S_ClearITPendingBit:清除指定的SPI/I2S中斷掛起位(SPI_IT_CRCERR)。