一、概述
SPI是Serial Peripheral interface的縮寫,是一種串行外設接口。全雙工通信,有4根信號線,在MCU、SOC、FLASH、DSP等芯片上常見。
SPI特點
SPI接口只有一個主機,可以有一個或者多個從機。時鐘信號由主機發送,所以主機要讀一個字節就需要發送一個字節,為從機提供時鐘信號。當存在多個從機時由CS片選信號選擇從機。
一主一從連接框圖
一主多從連接框圖
SPI的片選信號
如果是一主一從也可以不使用片選信號,此時從機SPI的接收數據中斷使能,在中斷ISR里處理數據;如果使用片選信號,可以不使用SPI硬件片選信號,可以使用一個帶外部中斷功能的IO作為CS。
SPI的4根信號
MISO: 主機輸入/從機輸出引腳。
MOSI: 主機輸出/從機輸入引腳。
CLK:串行時鐘信號,由主機產生。
CS:從機片選信號,由主機控制。
當然,4根線也不是必須全用上,可以只發送或只接收。可以參考STM32的SPI介紹。
SPI的4種mode
所謂的模式,是指可以通過配置CPOL(時鐘極性)來設定CLK空閑狀態的電平是高還是低;通過配置CPHA(時鐘相位)來設定在CLK的哪個沿進行數據采樣和數據發送。CPOL和CPHA可以配置成0或1,所以組合有4種mode。
主機和從機的使用的mode要匹配對應。比如SPI FLASH只支持兩種mode,所以主機初始化配置要注意。如下圖FLASH只支持mode 0 和 mode 3:
二、STM32程序初始化舉例
void SPI1_Init(void)
{
//Enable SPI1 clock and GPIO clock for SPI1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
//Configure SPI1 pins: SCK, MISO and MOSI
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//SPI1 Config
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;//主從機的配置相同
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;//主從機的配置相同
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;//主從機的配置相同
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_RXNE,ENABLE);//使能接收中斷
//Enable SPI1
SPI_Cmd(SPI1, ENABLE);
}
-
dsp
+關注
關注
554文章
8059瀏覽量
350397 -
STM32
+關注
關注
2272文章
10923瀏覽量
357544 -
SPI
+關注
關注
17文章
1721瀏覽量
92114 -
時鐘信號
+關注
關注
4文章
453瀏覽量
28663 -
MCU芯片
+關注
關注
3文章
253瀏覽量
11627
發布評論請先 登錄
相關推薦
評論