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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 踏踏實實搞清 stm32 SPI總線 基礎(chǔ)和編程

          踏踏實實搞清 stm32 SPI總線 基礎(chǔ)和編程

          作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

          SPI應(yīng)用是相當(dāng)?shù)膹V了,同步串行總線,同步同步當(dāng)然需要時鐘信號來統(tǒng)一了,這樣通訊雙方通訊時就比較默契沒那么延遲(呆呆)了。應(yīng)用于中低速場合。

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

          學(xué)起來從哪些地方入手呢?如下:

          SPI概念與特點 關(guān)鍵的時序接受 編程時重點 STM32內(nèi)部的SPI使用(介紹、功能、中斷)

          SPI概念與特點:不多說,串行,需要同步信號 主從結(jié)構(gòu)的 CS(片選) SCK SDI SDO

          全雙工 一主控多從 8或16位數(shù)據(jù)通信

          其它特點:8個主模式波特率預(yù)分頻系數(shù) fpcll/2

          主模式和從模式下快速通行 并支持切換

          編程MSB 或LSB在前

          專用發(fā)送和接受標(biāo)志可促發(fā)中斷

          有SPI忙標(biāo)志位

          支持硬件CRC校驗,發(fā)送模式下crc值作為最后一個字節(jié)被發(fā)送,接受模式下最后一字節(jié)自動CRC校驗

          支持錯誤中斷標(biāo)志,支持DMA功能的1字節(jié)發(fā)送和接受緩沖器:產(chǎn)生發(fā)送和接受請求。

          SPI總線時序介紹:

          看下下圖應(yīng)該就會了


          使用stm32 spi需要以下的步驟

          1.管腳因為復(fù)用的,故先配置好管腳、并打開spi時鐘

          2.設(shè)置spi的工作模式

          通過 SPI1_CR1 來設(shè)置,設(shè)置SPI1主機模式,設(shè)置數(shù)據(jù)格式8位,然后通過 CPOL 和 CPHA 位來設(shè)置 SCK時鐘極性及采樣方式。并設(shè)置 SPI1 的時鐘頻率(最大18Mhz),以及數(shù)據(jù)的格式(MSB 在前還是 LSB在前)。
          3.使能SPI.

          SPI固件庫函數(shù)

          下面是初始化,必須得結(jié)構(gòu)體原型

          typedef struct
          {
          uint16_t SPI_Direction;//設(shè)置方向 (2線全雙工、2線只接受、一線發(fā)送、一線接受)

          uint16_t SPI_Mode; //模式 (從或主設(shè)備)

          uint16_t SPI_DataSize; //寬度 (8或16位)

          uint16_t SPI_CPOL; //時鐘極性 (低或高)

          uint16_t SPI_CPHA; //時鐘相位 (第一個或第二個跳變沿)

          uint16_t SPI_NSS; //片選方式 (硬件或軟件方式)

          uint16_t SPI_BaudRatePrescaler; //波特率預(yù)分頻 (從2---256分頻)

          uint16_t SPI_FirstBit; //最先發(fā)送的位 (最低位,還是最高位在先)

          uint16_t SPI_CRCPolynomial; //設(shè)置crc多項式 (數(shù)字)如7

          }SPI_InitTypeDef;

          下面是實例,對SPI2進(jìn)行的初始化

          void SPI2_Init(void)
          {
          SPI_InitTypeDef SPI_InitStructure;
          GPIO_InitTypeDef GPIO_InitStructure;

          //配置SPI2管腳
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB, ENABLE);
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14| GPIO_Pin_15;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用推挽輸出
          GPIO_Init(GPIOB, &GPIO_InitStructure);

          //SPI2配置選項
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 ,ENABLE);

          SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
          SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
          SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
          SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
          SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
          SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
          SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
          SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
          SPI_InitStructure.SPI_CRCPolynomial = 7;
          SPI_Init(SPI2, &SPI_InitStructure);

          //使能SPI2
          SPI_Cmd(SPI2, ENABLE);
          }

          。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

          以上是,初始化的一些函數(shù),發(fā)現(xiàn)固件庫還有很多函數(shù)沒用上,下面就要談到應(yīng)用了

          STM32的SPI串行外圍總線接口,本程序,是將STM32的SPI配置為全雙工模式,且NSS使用的軟件模式。在使用SPI前,下面的這個過程我們必須理解,即STM32作為主機發(fā)送一個字節(jié)數(shù)據(jù)時,必然能接收到一個數(shù)據(jù),至于數(shù)據(jù)是否處理,由程序操作。


          上一頁 1 2 下一頁

          關(guān)鍵詞: stm32SPI總

          評論


          技術(shù)專區(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); })();