STM32-HAL庫使用分析-SPI三種接口


1.查詢模式(阻塞方式)polling mode (blocking mode)

 

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);

 

 

三個函數的區別:由於SPI一般情況下使用的都是全雙工通信方式,同時收同時發,所以三個函數本質上沒有區別。 HAL_SPI_Transmit函數忽略了接收的數據,HAL_SPI_Receive忽略了發送的數據。

 

使用方法:

對於主機來說,一次完整的SPI通訊需要1.拉低片選腳CS 2.調用HAL_SPI_TransmitReceive (函數調用結束即SPI通訊完成)3.拉高片選腳CS

對於從機來說,一次完整的SPI通訊需要 1.調用HAL_SPI_TransmitReceive,此時從機將以阻塞方式等待片選腳CS被主機拉低,拉低后自動開始SPI通訊(函數調用結束即SPI通訊完成)

 

2.中斷模式(非阻塞方式)

 

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);

 

發送或接收到一個數據以后會跳入TXE置1,產生SPI中斷,進入callback函數。

 

3.DMA模式

 

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);

 

長時間接收相同格式的數據。

接收DMA常用於高速AD芯片,發送DMA可用於示波器。

 

Void HAL_SPI_TxRxCallback ( SPI_HandleTypeDef *hspi);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM