新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > STM32再學(xué)習(xí)之工程師眼中的SPI

STM32再學(xué)習(xí)之工程師眼中的SPI

作者:jobs 時間:2014-06-23 來源:電子產(chǎn)品世界 收藏

  從上圖我們可以看出,當(dāng)CPHA置高時,其數(shù)據(jù)鎖存在第二個時鐘邊沿;CPHA清零時,數(shù)據(jù)鎖存在第一個時鐘邊沿。而CPOL參數(shù)置高時,數(shù)據(jù)鎖存在時鐘信號的下降沿,時鐘線空閑狀態(tài)為常高,反之,數(shù)據(jù)鎖存在時鐘信號的上升沿,空閑狀態(tài)為常低。

本文引用地址:http://m.butianyuan.cn/article/248687.htm

  對于數(shù)據(jù)的發(fā)送過程,幀格式也是可以修改的,例如可以選擇MSB方式(最高位先發(fā)送)或是LSB方式(最低位先發(fā)送),還可以選擇插入CRC校驗的方式等,這里對于這些高級的應(yīng)用,由于本文片幅有限就不再詳細(xì)講解了。

  接下來,我們通過STM32單片機對于外設(shè)的初始化過程再來看一下的硬件標(biāo)準(zhǔn)。

  void _init(void)

  {

  RCC_APB2PeriphClockCmd(sFLASH_CS_GPIO_CLK | sFLASH_SPI_MOSI_GPIO_CLK | sFLASH_SPI_MISO_GPIO_CLK |

  sFLASH_SPI_SCK_GPIO_CLK, ENABLE);

  /*!< 配置SPI的外設(shè)時鐘,并使能 */

  RCC_APB2PeriphClockCmd(sFLASH_SPI_CLK, ENABLE);

  /*!< 配置SCK引腳 */

  GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //此處根據(jù)具體應(yīng)用而設(shè)置,例如可配置為開漏輸出

  GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);

  /*!< 配置MOSI引腳 */

  GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN;

  GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);

  /*!< 配置MISO引腳 */

  GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

  GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);

  /*!< 配置NSS引腳為GPIO輸出 */

  GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure);

  /*!< SPI配置 */

  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //數(shù)據(jù)線兩線,雙向全雙半

  SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //

  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //

  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //CPOL置高,時鐘線在閑時常高,下降沿鎖存數(shù)據(jù)

  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //CPHA置高,則第二個時鐘沿鎖存數(shù)據(jù)

  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //從引腳為軟件配置方式

  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; //SPI時鐘頻率為4分頻

  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //MSB最高位優(yōu)先發(fā)送

  SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC檢驗公式選擇第7項

  SPI_Init(sFLASH_SPI, &SPI_InitStructure);

  /*!< 使能SPI */

  SPI_Cmd(sFLASH_SPI, ENABLE);

  }

fpga相關(guān)文章:fpga是什么


數(shù)字通信相關(guān)文章:數(shù)字通信原理




關(guān)鍵詞: FPGA SPI MCU

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉