<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          STM32 SPI介紹

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

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

          本文引用地址:http://www.ex-cimer.com/article/201611/316941.htm

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

          8或16位傳輸幀格式選擇

          主或從操作

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

          從模式頻率

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

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

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

          可編程的數(shù)據(jù)順序

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

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

          支持可靠通信的硬件CRC

          通常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ù)線(xiàn)上的沖突,從設(shè)備的NSS管腳可以由主設(shè)備當(dāng)做一個(gè)標(biāo)準(zhǔn)的IO來(lái)驅(qū)動(dòng),一旦被使能SSOE位,NSS管腳也可以作為輸出管腳,并在SPI設(shè)置為主模式時(shí)拉低,此時(shí)所有NSS管腳連接到主設(shè)備N(xiāo)SS管腳的SPI設(shè)備,會(huì)檢測(cè)到低電平,如果他們被設(shè)置NSS硬件模式,就會(huì)自動(dòng)進(jìn)入從設(shè)備狀態(tài)

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

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

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

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

          SPI從模式

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

          配置步驟

          1、配置DFF位以定義數(shù)據(jù)幀格式為8位或16位

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

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

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

          5、清除MSTR位,設(shè)置SPE位,使響應(yīng)引腳工作于SPI模式下

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

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

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

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

          數(shù)據(jù)接收過(guò)程

          對(duì)于接收方,當(dāng)數(shù)據(jù)接收完成時(shí)

          移位寄存器中的數(shù)據(jù)傳送到接受緩沖器,SPI_SR寄存器中的RXNE標(biāo)志被設(shè)置

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

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

          SPI主模式

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

          配置步驟

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

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

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

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

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

          6、必須設(shè)置MSTR和SPE位

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

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

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

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

          數(shù)據(jù)接收過(guò)程

          對(duì)于接收器來(lái)說(shuō),當(dāng)數(shù)據(jù)傳輸完成時(shí)

          移位寄存器里的數(shù)據(jù)傳送到接收緩沖器,并且RXNE標(biāo)志被置位

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

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

          一旦傳輸開(kāi)始,如果下一個(gè)將發(fā)送的數(shù)據(jù)被放進(jìn)了發(fā)送緩沖器,就可以為之一個(gè)連續(xù)的傳輸流,在試圖寫(xiě)發(fā)送緩沖器之前,需確認(rèn)TXE標(biāo)志應(yīng)該是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 數(shù)據(jù)捕獲第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的配置結(jié)束了可以使用了。

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

          _____________________________________________________________________________________

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

          注意在2.0的庫(kù)中函數(shù)

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

          SPI_I2S_SendDataSPI_I2S_ReceiveData SPI_I2S_GetFlagStatus

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

          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);讀寄存器用硬件清除標(biāo)志位。
          //SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_RXNE) ;直接軟件清除標(biāo)志位。
          }



          關(guān)鍵詞: STM32SPI介

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();