一、概述
SPI是Serial Peripheral interface的縮寫,是一種串行外設(shè)接口。全雙工通信,有4根信號線,在MCU、SOC、FLASH、DSP等芯片上常見。
SPI特點
SPI接口只有一個主機,可以有一個或者多個從機。時鐘信號由主機發(fā)送,所以主機要讀一個字節(jié)就需要發(fā)送一個字節(jié),為從機提供時鐘信號。當存在多個從機時由CS片選信號選擇從機。
一主一從連接框圖
一主多從連接框圖
SPI的片選信號
如果是一主一從也可以不使用片選信號,此時從機SPI的接收數(shù)據(jù)中斷使能,在中斷ISR里處理數(shù)據(jù);如果使用片選信號,可以不使用SPI硬件片選信號,可以使用一個帶外部中斷功能的IO作為CS。
SPI的4根信號
MISO: 主機輸入/從機輸出引腳。
MOSI: 主機輸出/從機輸入引腳。
CLK:串行時鐘信號,由主機產(chǎn)生。
CS:從機片選信號,由主機控制。
當然,4根線也不是必須全用上,可以只發(fā)送或只接收??梢詤⒖?a href="http://www.www27dydycom.cn/v/tag/751/" target="_blank">STM32的SPI介紹。
SPI的4種mode
所謂的模式,是指可以通過配置CPOL(時鐘極性)來設(shè)定CLK空閑狀態(tài)的電平是高還是低;通過配置CPHA(時鐘相位)來設(shè)定在CLK的哪個沿進行數(shù)據(jù)采樣和數(shù)據(jù)發(fā)送。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
+關(guān)注
關(guān)注
556文章
8158瀏覽量
357641 -
STM32
+關(guān)注
關(guān)注
2293文章
11032瀏覽量
365034 -
SPI
+關(guān)注
關(guān)注
17文章
1804瀏覽量
96010 -
時鐘信號
+關(guān)注
關(guān)注
4文章
468瀏覽量
29233 -
MCU芯片
+關(guān)注
關(guān)注
3文章
256瀏覽量
12117
發(fā)布評論請先 登錄
串行外設(shè)接口SPI模塊簡析
ADIuC812的串行外設(shè)接口(SPI)及其在LonWork
串行外設(shè)接口SPI
理解ATE SPI (串行外設(shè)接口)

一文讀懂SPI串行外設(shè)接口
dsPIC33E/PIC24E器件之串行外設(shè)接口(SPI)
dsPIC30F系列參考手冊之串行外設(shè)接口(SPI)

PIC24F系列參考手冊之串行外設(shè)接口(SPI)

PIC24H系列參考手冊之串行外設(shè)接口(SPI)

SPI 串行外設(shè)接口

SPI串行外設(shè)接口設(shè)計實現(xiàn)

評論