<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

STM32 SPI介紹

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
SPI特征

3線(xiàn)全雙工同步傳輸

本文引用地址:http://dyxdggzs.com/article/201611/316941.htm

帶貨不帶第三根雙向數據線(xiàn)的雙線(xiàn)單工同步傳輸

8或16位傳輸幀格式選擇

主或從操作

8個(gè)模式波特率分頻系數

從模式頻率

主模式和從模式的快速通信:最大SPI速度達到了18MHz

主模式和從模式均可以由軟件或硬件進(jìn)行NSS管理:主/從操作模式的動(dòng)態(tài)改變

可編程的時(shí)鐘極性和相位

可編程的數據順序

可觸發(fā)中斷的專(zhuān)用發(fā)送和接受標志

SPI總線(xiàn)忙狀態(tài)標志

支持可靠通信的硬件CRC

通常SPI通過(guò)4個(gè)管腳與外部器件相連

MISO:主設備輸入/從設備輸出管腳,該管腳在從模式下發(fā)送數據,在主模式下接收數據

MOSI:主設備輸出/從設置輸入管腳,該管腳在主模式下發(fā)送數據,在從模式下接受數據

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

NSS:從設置選擇,這是一個(gè)可選的管腳,用來(lái)選擇主/從設置,他的功能是用來(lái)作為片選管腳,讓主設備可以單獨的與特定從設備通訊,避免數據線(xiàn)上的沖突,從設備的NSS管腳可以由主設備當做一個(gè)標準的IO來(lái)驅動(dòng),一旦被使能SSOE位,NSS管腳也可以作為輸出管腳,并在SPI設置為主模式時(shí)拉低,此時(shí)所有NSS管腳連接到主設備N(xiāo)SS管腳的SPI設備,會(huì )檢測到低電平,如果他們被設置NSS硬件模式,就會(huì )自動(dòng)進(jìn)入從設備狀態(tài)

時(shí)鐘信號的相位和極性

SPI_CR寄存器的CPOL和CPHA位,能夠組合成四種可能的時(shí)序關(guān)系,CPOL(時(shí)鐘極性)位控制在沒(méi)有數據傳輸時(shí)時(shí)鐘的空閑狀態(tài)電平,此位對主模式和從設備下的設備都有效,如果CPOL被清0,SCK引腳在空閑狀態(tài)保持低電平;如果CPOL被置1,SCK引腳在空閑狀態(tài)保持高電平

如果CPHA時(shí)鐘相位位被置1,SCK時(shí)鐘的第二個(gè)邊沿(CPOL位為0時(shí)就是下降沿,CPOL位為1時(shí)就是上升沿),進(jìn)行數據位的采樣,數據在第二個(gè)時(shí)鐘邊沿被鎖存

CPOL時(shí)鐘極性和CPHA時(shí)鐘相位的組合選擇數據捕捉的時(shí)鐘邊沿

SPI從模式

在從配置里,SCK引腳用于接收到主設備來(lái)的串行時(shí)鐘,SPI_CR1寄存器的BR的設置不影響數據傳輸速率

配置步驟

1、配置DFF位以定義數據幀格式為8位或16位

2、選擇CPOL和CPHA位來(lái)定義數據傳輸和串行時(shí)鐘之間的相位關(guān)系,為保證正確的數據傳輸,從設備和主設備的CPOL和CPHA位必須配置成相同的方式

3、幀格式(MSB在前還是LSB在前取決于SPI_CR1寄存器中的LSBFIRST位)必須和主設備相同

4、硬件模式下,在完整的數據幀發(fā)送過(guò)程中,NSS引腳必須為低電平,軟件模式下,設這SPI_CR1寄存器中的SSM位并清除SSI位

5、清除MSTR位,設置SPE位,使響應引腳工作于SPI模式下

在這個(gè)配置里,MOSI引腳是數據輸入,MISO引腳是數據輸出

數據發(fā)送過(guò)程

數據字被并行地寫(xiě)入發(fā)送緩沖器

當從設備接收到時(shí)鐘信號,并且在MOSI引腳上出現第一個(gè)數據位時(shí),發(fā)送過(guò)程開(kāi)始,第一個(gè)位被發(fā)送出去,余下的位(對于9位數據幀格式,還有7位;對于16位數據幀格式,還有15位)被裝進(jìn)移位寄存器,當發(fā)送緩沖器中的數據傳輸到移位寄存器時(shí),SPI_SR寄存器里的TXE標志被設置,如果設置了SPI_CR2寄存器上的TXEIE位,將會(huì )產(chǎn)生中斷

數據接收過(guò)程

對于接收方,當數據接收完成時(shí)

移位寄存器中的數據傳送到接受緩沖器,SPI_SR寄存器中的RXNE標志被設置

如果設置了SPI_CR2寄存器的RXEIE位,則產(chǎn)生中斷

在最后一個(gè)采樣時(shí)鐘邊沿后,RXNE位被置1,移位寄存器中接收到的數據字節被傳送到接受緩沖器,當讀SPI_DR寄存器時(shí),SPI設備返回這個(gè)值。讀SPI_DR寄存器是,RXNE位被清除。

SPI主模式

在主配置時(shí),串行時(shí)鐘在SCK腳產(chǎn)生

配置步驟

1、通過(guò)SPI_CR1寄存器的BR位定義串行時(shí)鐘波特率

2、選擇CPOL和CPHA位,定義數據傳輸和串行時(shí)鐘的相位關(guān)系

3、設置DRR位來(lái)定義8位或16位數據幀格式

4、配置SPI_CR1寄存器的LSBFIRST位定義幀格式

5、如果NSS引腳需要工作在輸入模式,硬件模式中在整個(gè)數據幀傳輸器件應把NSS腳連接到高電平;在軟件模式中,需設置SPI_CR1寄存器的SSM和SSI位,如果NSS引腳工作在輸出模式,則只需設置SSOE位

6、必須設置MSTR和SPE位

在這個(gè)配置中,MOSI腳是數據輸出,而MISO腳是數據輸入。

數據發(fā)送過(guò)程

當一字節寫(xiě)進(jìn)發(fā)送緩沖器時(shí),發(fā)送過(guò)程開(kāi)始。

在發(fā)送第一個(gè)數據位時(shí),數據字被并行地(通過(guò)內部總線(xiàn))傳入以為寄存器,而后串行地溢出到MOSI腳上;MSB在線(xiàn)還是LSB在線(xiàn),取決于SPI_CR1寄存器中的LSBFIRST位,數據從發(fā)送緩沖器傳輸到移位寄存器時(shí)TXE標志將被置位,如果設置SPI_CR1寄存器中的TXEIE位,將產(chǎn)生中斷

數據接收過(guò)程

對于接收器來(lái)說(shuō),當數據傳輸完成時(shí)

移位寄存器里的數據傳送到接收緩沖器,并且RXNE標志被置位

如果SPI_CR2寄存器中的RXEIE位被置位,則產(chǎn)生中斷。

在最后采樣時(shí)鐘沿,RXNE位被設置,在移位寄存器中接收到的數據字被傳送到接受緩沖器,讀SPI_DR寄存器時(shí),SPIU設備返回接受到的數據字,讀SPI_DR寄存器將清除RXNE位。

一旦傳輸開(kāi)始,如果下一個(gè)將發(fā)送的數據被放進(jìn)了發(fā)送緩沖器,就可以為之一個(gè)連續的傳輸流,在試圖寫(xiě)發(fā)送緩沖器之前,需確認TXE標志應該是1

SPI_InitTypeDef SPI_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);


SPI_Cmd(SPI2, DISABLE);//必須先禁能,才能改變MODE
SPI_InitStructure.SPI_Direction =SPI_Direction_2Lines_FullDuplex;//兩線(xiàn)全雙工
SPI_InitStructure.SPI_Mode =SPI_Mode_Master;//主
SPI_InitStructure.SPI_DataSize =SPI_DataSize_8b;//8位
SPI_InitStructure.SPI_CPOL =SPI_CPOL_High;//CPOL=1時(shí)鐘懸空高
SPI_InitStructure.SPI_CPHA =SPI_CPHA_1Edge;//CPHA=1 數據捕獲第2個(gè)
SPI_InitStructure.SPI_NSS =SPI_NSS_Soft;//軟件NSS
SPI_InitStructure.SPI_BaudRatePrescaler =SPI_BaudRatePrescaler_2;//2分頻
SPI_InitStructure.SPI_FirstBit =SPI_FirstBit_MSB;//高位在前
SPI_InitStructure.SPI_CRCPolynomial =7;//CRC7

SPI_Init(SPI2,&SPI_InitStructure);
SPI_Cmd(SPI2, ENABLE);

//spi的配置結束了可以使用了。

也可用 函數SPI_StructInit 把SPI_InitStruct中的每一個(gè)參數按缺省值填入

_____________________________________________________________________________________

發(fā)送緩沖器空閑標志(TXE)【3.0SPI_I2S_FLAG_TXE】
此標志為’1’時(shí)表明發(fā)送緩沖器為空,可以寫(xiě)下一個(gè)待發(fā)送的數據進(jìn)入緩沖器中。當寫(xiě)入SPI_DR時(shí),TXE標志被清除。
接收緩沖器非空(RXNE)【3.0SPI_I2S_FLAG_RXNE】
此標志為’1’時(shí)表明在接收緩沖器中包含有效的接收數據。讀SPI數據寄存器可以清除此標志。

注意在2.0的庫中函數

SPI_SendData SPI_ReceiveData SPI_GetFlagStatus 等在3.0的庫中 變?yōu)?/p>

SPI_I2S_SendDataSPI_I2S_ReceiveData SPI_I2S_GetFlagStatus

寫(xiě)一個(gè)發(fā)送/接受函數

static u8 SPIByte(u8 byte)

{

while((SPI2->SR &SPI_I2S_FLAG_TXE)==RESET);
//while((SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE))==RESET);

SPI2->DR = byte;
//SPI_I2S_SendData(SPI2,byte);

while((SPI2->SR &SPI_I2S_FLAG_RXNE)==RESET);

//while((SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE))==RESET);
return(SPI2->DR);

//returnSPI_I2S_ReceiveData(SPI2);讀寄存器用硬件清除標志位。
//SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_RXNE) ;直接軟件清除標志位。
}



關(guān)鍵詞: STM32SPI介

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>