標(biāo)題: STM32的SPI介紹和配置 [打印本頁(yè)]

作者: 51黑黑黑    時(shí)間: 2016-2-12 21:10
標(biāo)題: STM32的SPI介紹和配置
通常SPI通過(guò)4個(gè)引腳與外部器件相連:

● MISO:主設(shè)備輸入/從設(shè)備輸出引腳。該引腳在從模式下發(fā)送數(shù)據(jù),在主模式下接收數(shù)據(jù)。

● MOSI:主設(shè)備輸出/從設(shè)備輸入引腳。該引腳在主模式下發(fā)送數(shù)據(jù),在從模式下接收數(shù)據(jù)。

● SCK:串口時(shí)鐘,作為主設(shè)備的輸出,從設(shè)備的輸入

●NSS:從設(shè)備選擇。這是一個(gè)可選的引腳,用來(lái)選擇主/從設(shè)備。它的功能是用來(lái)作為“片選引腳”,讓主設(shè)備可以單獨(dú)地與特定從設(shè)備通訊,避免數(shù)據(jù)線上的沖突。從設(shè)備的NSS引腳可以由主設(shè)備的一個(gè)標(biāo)準(zhǔn)I/O引腳來(lái)驅(qū)動(dòng)。一旦被使能(SSOE位),NSS引腳也可以作為輸出引腳,并在SPI處于主模式時(shí)拉低;此時(shí),所有的SPI設(shè)備,如果它們的NSS引腳連接到主設(shè)備的NSS引腳,則會(huì)檢測(cè)到低電平,如果它們被設(shè)置為NSS硬件模式,就會(huì)自動(dòng)進(jìn)入從設(shè)備狀態(tài)。當(dāng)配置為主設(shè)備、NSS配置為輸入引腳(MSTR=1,SSOE=0)時(shí),如果NSS被拉低,則這個(gè)SPI設(shè)備進(jìn)入主模式失敗狀態(tài):即MSTR位被自動(dòng)清除,此設(shè)備進(jìn)入從模式。

下圖最能說(shuō)明SPI的工作原理,非常簡(jiǎn)單:

下面是STM32的SPI1模塊的簡(jiǎn)單配置
void SPI_configuration()
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1|GPIO_Pin_6|RCC_APB2Periph_GPIOA,ENABLE);//使能SP1I和GPIOA時(shí)鐘
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_7;//MOSISCK復(fù)用
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復(fù)用推挽輸出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//SPI_CS
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;//設(shè)置SPI單向或者雙向的數(shù)據(jù)模式:SPI設(shè)置為雙線雙向全雙工
SPI_InitStructure.SPI_Mode=SPI_Mode_Master;//設(shè)置SPI工作模式:設(shè)置為主SPI
SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;//設(shè)置SPI的數(shù)據(jù)大小:SPI發(fā)送接收8位幀結(jié)構(gòu)
SPI_InitStructure.SPI_CPOL=SPI_CPOL_High;//選擇了串行時(shí)鐘的穩(wěn)態(tài):時(shí)鐘懸空高
SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;//數(shù)據(jù)捕獲于第二個(gè)時(shí)鐘沿
SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;//SPI_NSS_Soft;//NSS信號(hào)由硬件(NSS管腳)還是軟件(使用SSI位)管理:內(nèi)部NSS信號(hào)有SSI位控制
SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_2; //定義波特率預(yù)分頻的值:波特率預(yù)分頻值為256
SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;//指定數(shù)據(jù)傳輸從MSB位還是LSB位開(kāi)始:數(shù)據(jù)傳輸從MSB位開(kāi)始
//SPI_InitStructure.SPI_CRCPolynomial=7;//CRC值計(jì)算的多項(xiàng)式
SPI_Init(SPI1,&SPI_InitStructure);//根據(jù)SPI_InitStruct中指定的參數(shù)初始化外設(shè)SPIx寄存器
SPI_Cmd(SPI1,ENABLE);//使能SPI外設(shè)  
}







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1