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可用於示波器。
