電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 33|回復(fù): 0
收起左側(cè)

STM32CubeMX之SPI接口

[復(fù)制鏈接]

454

主題

454

帖子

2398

積分

三級會員

Rank: 3Rank: 3

積分
2398
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-4-9 00:07:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本文主要介紹STM32的SPI接口、利用STM32CubeMX軟件配置SPI接口及其使用方法。


01


SPI協(xié)議介紹

SPI協(xié)全稱串行外圍設(shè)備接口(Serial Peripheral Interface),是一種高速全雙工的通信總線。主要用在MCU與ADC、DAC、FLASH等模塊之間的通信。
SPI協(xié)議不同于UART,有主從之分,一個主機(jī)可以連接多個從機(jī),通過片選信號來選擇與哪個從機(jī)通訊。SPI接口包含4條線:
  • NSS:片選
  • SCK:時鐘信號
  • MISO:主設(shè)備輸入 / 從設(shè)備輸出
  • MOSI:主設(shè)備輸出 / 從設(shè)備輸入



    SPI的通訊速率由時鐘信號頻率決定。根據(jù)時鐘極性(CPOL)及相位(CPHA)不同,SPI有四種工作模式。時鐘極性(CPOL)定義了時鐘空閑狀態(tài)電平:CPOL=0表示時鐘空閑時為低電平。CPOL=1表示時鐘空閑時為高電平。時鐘相位(CPHA)定義數(shù)據(jù)的采集時間:CPHA=0表示在時鐘的第一個跳變沿進(jìn)行數(shù)據(jù)采樣。CPHA=1表示在時鐘的第二個跳變沿進(jìn)行數(shù)據(jù)采樣。




    02


    STM32CubeMX配置

    以STM32F072為例,其SPI接口配置如下:


    選擇SPI1,模式為Full-Duplex Master(全雙工主機(jī)模式)
    硬件NSS信號關(guān)閉,手動配置某個端口為輸出模式,作為片選信號。
    其它參數(shù)配置根據(jù)自己所控制的從機(jī)的要求進(jìn)行配置。也可根據(jù)需要打開中斷或DMA傳輸。設(shè)置完成后點擊生成代碼即可。
    SPI相關(guān)的函數(shù)主要包括以下幾個,根據(jù)函數(shù)名和參數(shù)名基本上可以看出每個函數(shù)怎么調(diào)用,這里就不做過多介紹。
  • HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size,                                          uint32_t Timeout);HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData,                                             uint16_t Size);HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData,                                              uint16_t Size);
    歡迎關(guān)注公眾號"嵌入式技術(shù)開發(fā)",大家可以后臺給我留言溝通交流。如果覺得該公眾號對你有所幫助,也歡迎推薦分享給其他人。
  • 回復(fù)

    使用道具 舉報

    發(fā)表回復(fù)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表