210#ifdef HAL_SPI_MODULE_ENABLED
217#define SPI_DEFAULT_TIMEOUT 100U
218#define SPI_BSY_FLAG_WORKAROUND_TIMEOUT 1000U
240 uint32_t Timeout, uint32_t Tickstart);
249#if (USE_SPI_CRC != 0U)
351#if (USE_SPI_CRC != 0U)
366#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
377 if (hspi->MspInitCallback == NULL)
383 hspi->MspInitCallback(hspi);
398 WRITE_REG(hspi->
Instance->CR1, ((hspi->
Init.
Mode & (SPI_CR1_MSTR | SPI_CR1_SSI)) |
399 (hspi->
Init.
Direction & (SPI_CR1_RXONLY | SPI_CR1_BIDIMODE)) |
403 (hspi->
Init.
NSS & SPI_CR1_SSM) |
411#if (USE_SPI_CRC != 0U)
420#if defined(SPI_I2SCFGR_I2SMOD)
422 CLEAR_BIT(hspi->
Instance->I2SCFGR, SPI_I2SCFGR_I2SMOD);
453#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
454 if (hspi->MspDeInitCallback == NULL)
460 hspi->MspDeInitCallback(hspi);
507#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
518 pSPI_CallbackTypeDef pCallback)
522 if (pCallback == NULL)
525 hspi->
ErrorCode |= HAL_SPI_ERROR_INVALID_CALLBACK;
536 case HAL_SPI_TX_COMPLETE_CB_ID :
537 hspi->TxCpltCallback = pCallback;
540 case HAL_SPI_RX_COMPLETE_CB_ID :
541 hspi->RxCpltCallback = pCallback;
544 case HAL_SPI_TX_RX_COMPLETE_CB_ID :
545 hspi->TxRxCpltCallback = pCallback;
548 case HAL_SPI_TX_HALF_COMPLETE_CB_ID :
549 hspi->TxHalfCpltCallback = pCallback;
552 case HAL_SPI_RX_HALF_COMPLETE_CB_ID :
553 hspi->RxHalfCpltCallback = pCallback;
556 case HAL_SPI_TX_RX_HALF_COMPLETE_CB_ID :
557 hspi->TxRxHalfCpltCallback = pCallback;
560 case HAL_SPI_ERROR_CB_ID :
561 hspi->ErrorCallback = pCallback;
564 case HAL_SPI_ABORT_CB_ID :
565 hspi->AbortCpltCallback = pCallback;
568 case HAL_SPI_MSPINIT_CB_ID :
569 hspi->MspInitCallback = pCallback;
572 case HAL_SPI_MSPDEINIT_CB_ID :
573 hspi->MspDeInitCallback = pCallback;
578 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
589 case HAL_SPI_MSPINIT_CB_ID :
590 hspi->MspInitCallback = pCallback;
593 case HAL_SPI_MSPDEINIT_CB_ID :
594 hspi->MspDeInitCallback = pCallback;
599 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
609 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
639 case HAL_SPI_TX_COMPLETE_CB_ID :
643 case HAL_SPI_RX_COMPLETE_CB_ID :
647 case HAL_SPI_TX_RX_COMPLETE_CB_ID :
651 case HAL_SPI_TX_HALF_COMPLETE_CB_ID :
655 case HAL_SPI_RX_HALF_COMPLETE_CB_ID :
659 case HAL_SPI_TX_RX_HALF_COMPLETE_CB_ID :
663 case HAL_SPI_ERROR_CB_ID :
667 case HAL_SPI_ABORT_CB_ID :
671 case HAL_SPI_MSPINIT_CB_ID :
675 case HAL_SPI_MSPDEINIT_CB_ID :
681 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
692 case HAL_SPI_MSPINIT_CB_ID :
696 case HAL_SPI_MSPDEINIT_CB_ID :
702 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
712 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
772 uint16_t initial_TxXferCount;
779 initial_TxXferCount = Size;
786 if ((pData == NULL) || (Size == 0U))
816#if (USE_SPI_CRC != 0U)
825 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
892#if (USE_SPI_CRC != 0U)
896 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
937#if (USE_SPI_CRC != 0U)
938 __IO uint32_t tmpreg = 0U;
957 if ((pData == NULL) || (Size == 0U))
979#if (USE_SPI_CRC != 0U)
998 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1055#if (USE_SPI_CRC != 0U)
1060 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
1091 tmpreg = READ_REG(hspi->
Instance->DR);
1103#if (USE_SPI_CRC != 0U)
1136 uint16_t Size, uint32_t Timeout)
1138 uint16_t initial_TxXferCount;
1142#if (USE_SPI_CRC != 0U)
1143 __IO uint32_t tmpreg = 0U;
1147 uint32_t txallowed = 1U;
1156 tmp_state = hspi->
State;
1158 initial_TxXferCount = Size;
1166 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
1193#if (USE_SPI_CRC != 0U)
1202 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1217#if (USE_SPI_CRC != 0U)
1221 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
1237#if (USE_SPI_CRC != 0U)
1241 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
1272#if (USE_SPI_CRC != 0U)
1276 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
1291#if (USE_SPI_CRC != 0U)
1295 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
1318#if (USE_SPI_CRC != 0U)
1332 tmpreg = READ_REG(hspi->
Instance->DR);
1392 if ((pData == NULL) || (Size == 0U))
1436#if (USE_SPI_CRC != 0U)
1445 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1483 if ((pData == NULL) || (Size == 0U))
1522#if (USE_SPI_CRC != 0U)
1535 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1568 tmp_state = hspi->
State;
1577 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
1612#if (USE_SPI_CRC != 0U)
1622 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1658 if ((pData == NULL) || (Size == 0U))
1688#if (USE_SPI_CRC != 0U)
1720 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1733 SET_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN);
1769 if ((pData == NULL) || (Size == 0U))
1798#if (USE_SPI_CRC != 0U)
1830 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1843 SET_BIT(hspi->
Instance->CR2, SPI_CR2_RXDMAEN);
1872 tmp_state = hspi->
State;
1881 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
1908#if (USE_SPI_CRC != 0U)
1948 SET_BIT(hspi->
Instance->CR2, SPI_CR2_RXDMAEN);
1969 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1982 SET_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN);
2003 __IO uint32_t count;
2004 __IO uint32_t resetcount;
2012 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_ERRIE);
2053 if (hspi->
hdmatx != NULL)
2066 CLEAR_BIT(hspi->
Instance->CR2, (SPI_CR2_TXDMAEN));
2085 if (hspi->
hdmarx != NULL)
2101 CLEAR_BIT(hspi->
Instance->CR2, (SPI_CR2_RXDMAEN));
2148 uint32_t abortcplt ;
2149 __IO uint32_t count;
2150 __IO uint32_t resetcount;
2159 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_ERRIE);
2199 if (hspi->
hdmatx != NULL)
2213 if (hspi->
hdmarx != NULL)
2231 if (hspi->
hdmatx != NULL)
2249 if (hspi->
hdmarx != NULL)
2264 if (abortcplt == 1U)
2290#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2291 hspi->AbortCpltCallback(hspi);
2312 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN);
2332 SET_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN);
2356 if (hspi->
hdmatx != NULL)
2365 if (hspi->
hdmarx != NULL)
2375 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN);
2388 uint32_t itsource = hspi->
Instance->CR2;
2389 uint32_t itflag = hspi->
Instance->SR;
2448 CLEAR_BIT(hspi->
Instance->CR2, (SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN));
2451 if (hspi->
hdmarx != NULL)
2462 if (hspi->
hdmatx != NULL)
2476#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2477 hspi->ErrorCallback(hspi);
2688 if ((hdma->
Instance->CR & DMA_SxCR_CIRC) != DMA_SxCR_CIRC)
2694 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN);
2714#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2715 hspi->ErrorCallback(hspi);
2723#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2724 hspi->TxCpltCallback(hspi);
2740#if (USE_SPI_CRC != 0U)
2741 __IO uint32_t tmpreg = 0U;
2748 if ((hdma->
Instance->CR & DMA_SxCR_CIRC) != DMA_SxCR_CIRC)
2753#if (USE_SPI_CRC != 0U)
2764 tmpreg = READ_REG(hspi->
Instance->DR);
2774 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN);
2779 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_RXDMAEN);
2791#if (USE_SPI_CRC != 0U)
2803#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2804 hspi->ErrorCallback(hspi);
2812#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2813 hspi->RxCpltCallback(hspi);
2829#if (USE_SPI_CRC != 0U)
2830 __IO uint32_t tmpreg = 0U;
2837 if ((hdma->
Instance->CR & DMA_SxCR_CIRC) != DMA_SxCR_CIRC)
2842#if (USE_SPI_CRC != 0U)
2852 tmpreg = READ_REG(hspi->
Instance->DR);
2865 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN);
2871#if (USE_SPI_CRC != 0U)
2883#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2884 hspi->ErrorCallback(hspi);
2892#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2893 hspi->TxRxCpltCallback(hspi);
2910#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2911 hspi->TxHalfCpltCallback(hspi);
2928#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2929 hspi->RxHalfCpltCallback(hspi);
2946#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2947 hspi->TxRxHalfCpltCallback(hspi);
2964 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN);
2969#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2970 hspi->ErrorCallback(hspi);
2989#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2990 hspi->ErrorCallback(hspi);
3007 __IO uint32_t count;
3013 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN);
3027 if (hspi->
hdmarx != NULL)
3054#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3055 hspi->AbortCpltCallback(hspi);
3079 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_RXDMAEN);
3088 if (hspi->
hdmatx != NULL)
3115#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3116 hspi->AbortCpltCallback(hspi);
3138#if (USE_SPI_CRC != 0U)
3141 hspi->
RxISR = SPI_2linesRxISR_8BITCRC;
3156#if (USE_SPI_CRC != 0U)
3165 __IO uint8_t *ptmpreg8;
3166 __IO uint8_t tmpreg8 = 0;
3169 ptmpreg8 = (__IO uint8_t *)&hspi->
Instance->DR;
3171 tmpreg8 = *ptmpreg8;
3200#if (USE_SPI_CRC != 0U)
3204 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3236#if (USE_SPI_CRC != 0U)
3239 hspi->
RxISR = SPI_2linesRxISR_16BITCRC;
3254#if (USE_SPI_CRC != 0U)
3263 __IO uint32_t tmpreg = 0U;
3266 tmpreg = READ_REG(hspi->
Instance->DR);
3293#if (USE_SPI_CRC != 0U)
3297 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3314#if (USE_SPI_CRC != 0U)
3323 __IO uint8_t *ptmpreg8;
3324 __IO uint8_t tmpreg8 = 0;
3327 ptmpreg8 = (__IO uint8_t *)&hspi->
Instance->DR;
3329 tmpreg8 = *ptmpreg8;
3349#if (USE_SPI_CRC != 0U)
3353 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3359#if (USE_SPI_CRC != 0U)
3362 hspi->
RxISR = SPI_RxISR_8BITCRC;
3370#if (USE_SPI_CRC != 0U)
3379 __IO uint32_t tmpreg = 0U;
3382 tmpreg = READ_REG(hspi->
Instance->DR);
3405#if (USE_SPI_CRC != 0U)
3409 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3415#if (USE_SPI_CRC != 0U)
3418 hspi->
RxISR = SPI_RxISR_16BITCRC;
3440#if (USE_SPI_CRC != 0U)
3444 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3466#if (USE_SPI_CRC != 0U)
3470 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3488 uint32_t Timeout, uint32_t Tickstart)
3490 __IO uint32_t count;
3491 uint32_t tmp_timeout;
3492 uint32_t tmp_tickstart;
3495 tmp_timeout = Timeout - (
HAL_GetTick() - Tickstart);
3499 count = tmp_timeout * ((SystemCoreClock * 32U) >> 20U);
3505 if (((
HAL_GetTick() - tmp_tickstart) >= tmp_timeout) || (tmp_timeout == 0U))
3685#if (USE_SPI_CRC != 0U)
3693#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3694 hspi->ErrorCallback(hspi);
3708#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3709 hspi->RxCpltCallback(hspi);
3718#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3719 hspi->TxRxCpltCallback(hspi);
3729#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3730 hspi->ErrorCallback(hspi);
3735#if (USE_SPI_CRC != 0U)
3764#if (USE_SPI_CRC != 0U)
3771#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3772 hspi->ErrorCallback(hspi);
3783#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3784 hspi->RxCpltCallback(hspi);
3792#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3793 hspi->ErrorCallback(hspi);
3798#if (USE_SPI_CRC != 0U)
3847#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3848 hspi->ErrorCallback(hspi);
3856#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3857 hspi->TxCpltCallback(hspi);
3872 __IO uint32_t tmpreg = 0U;
3890 CLEAR_BIT(hspi->
Instance->CR2, (SPI_CR2_TXEIE | SPI_CR2_RXNEIE | SPI_CR2_ERRIE));
3893 tmpreg = READ_REG(hspi->
Instance->DR);
3909 CLEAR_BIT(hspi->
Instance->CR2, (SPI_CR2_TXEIE));
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer.
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer in Interrupt mode.
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
Start the DMA Transfer with interrupt enabled.
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
#define SPI_BAUDRATEPRESCALER_2
#define SPI_CRCCALCULATION_ENABLE
#define SPI_CRCCALCULATION_DISABLE
#define SPI_DATASIZE_8BIT
#define SPI_DATASIZE_16BIT
#define SPI_DIRECTION_2LINES_RXONLY
#define SPI_DIRECTION_2LINES
#define SPI_DIRECTION_1LINE
#define HAL_SPI_ERROR_MODF
#define HAL_SPI_ERROR_FLAG
#define HAL_SPI_ERROR_OVR
#define HAL_SPI_ERROR_NONE
#define HAL_SPI_ERROR_DMA
#define HAL_SPI_ERROR_ABORT
#define HAL_SPI_ERROR_CRC
#define HAL_SPI_ERROR_FRE
void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi)
De-Initialize the SPI MSP.
HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi)
Initialize the SPI according to the specified parameters in the SPI_InitTypeDef and initialize the as...
HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi)
De-Initialize the SPI peripheral.
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
Initialize the SPI MSP.
HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi)
Abort ongoing transfer (blocking mode).
HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t *pRxData, uint16_t Size)
Transmit and Receive an amount of data in non-blocking mode with Interrupt.
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
Rx Transfer completed callback.
HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi)
Pause the DMA Transfer.
HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size)
Receive an amount of data in non-blocking mode with DMA.
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
Tx and Rx Transfer completed callback.
HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi)
Abort ongoing transfer (Interrupt mode).
HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi)
Stop the DMA Transfer.
HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi)
Resume the DMA Transfer.
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
Transmit and Receive an amount of data in blocking mode.
HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size)
Transmit an amount of data in non-blocking mode with Interrupt.
HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size)
Receive an amount of data in non-blocking mode with Interrupt.
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
Tx Transfer completed callback.
HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size)
Transmit an amount of data in non-blocking mode with DMA.
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size, uint32_t Timeout)
Transmit an amount of data in blocking mode.
void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi)
Tx Half Transfer completed callback.
void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi)
SPI error callback.
void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi)
Tx and Rx Half Transfer callback.
void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi)
Rx Half Transfer completed callback.
void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi)
Handle SPI interrupt request.
void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi)
SPI Abort Complete callback.
HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t *pRxData, uint16_t Size)
Transmit and Receive an amount of data in non-blocking mode with DMA.
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Receive an amount of data in blocking mode.
HAL_SPI_StateTypeDef HAL_SPI_GetState(const SPI_HandleTypeDef *hspi)
Return the SPI handle state.
uint32_t HAL_SPI_GetError(const SPI_HandleTypeDef *hspi)
Return the SPI error code.
#define __HAL_SPI_ENABLE(__HANDLE__)
Enable the SPI peripheral.
#define __HAL_SPI_DISABLE_IT(__HANDLE__, __INTERRUPT__)
Disable the specified SPI interrupts.
#define __HAL_SPI_CLEAR_MODFFLAG(__HANDLE__)
Clear the SPI MODF pending flag.
#define __HAL_SPI_ENABLE_IT(__HANDLE__, __INTERRUPT__)
Enable the specified SPI interrupts.
#define __HAL_SPI_CLEAR_FREFLAG(__HANDLE__)
Clear the SPI FRE pending flag.
#define __HAL_SPI_GET_FLAG(__HANDLE__, __FLAG__)
Check whether the specified SPI flag is set or not.
#define __HAL_SPI_DISABLE(__HANDLE__)
Disable the SPI peripheral.
#define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__)
Clear the SPI CRCERR pending flag.
#define __HAL_SPI_CLEAR_OVRFLAG(__HANDLE__)
Clear the SPI OVR pending flag.
HAL_SPI_StateTypeDef
HAL SPI State structure definition.
@ HAL_SPI_STATE_BUSY_TX_RX
#define SPI_DEFAULT_TIMEOUT
#define SPI_BSY_FLAG_WORKAROUND_TIMEOUT
static void SPI_DMAHalfTransmitReceiveCplt(DMA_HandleTypeDef *hdma)
DMA SPI half transmit receive process complete callback.
static void SPI_CloseRxTx_ISR(SPI_HandleTypeDef *hspi)
Handle the end of the RXTX transaction.
static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi)
Handle abort a Rx transaction.
static void SPI_2linesTxISR_8BIT(struct __SPI_HandleTypeDef *hspi)
Tx 8-bit handler for Transmit and Receive in Interrupt mode.
static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart)
Handle the check of the RXTX or TX transaction complete.
static void SPI_TxISR_16BIT(struct __SPI_HandleTypeDef *hspi)
Handle the data 16-bit transmit in Interrupt mode.
static void SPI_2linesTxISR_16BIT(struct __SPI_HandleTypeDef *hspi)
Tx 16-bit handler for Transmit and Receive in Interrupt mode.
static void SPI_RxISR_16BIT(struct __SPI_HandleTypeDef *hspi)
Manage the 16-bit receive in Interrupt context.
static void SPI_CloseTx_ISR(SPI_HandleTypeDef *hspi)
Handle the end of the TX transaction.
static void SPI_DMATransmitCplt(DMA_HandleTypeDef *hdma)
DMA SPI transmit process complete callback.
static void SPI_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi)
Rx 8-bit handler for Transmit and Receive in Interrupt mode.
static void SPI_TxISR_8BIT(struct __SPI_HandleTypeDef *hspi)
Handle the data 8-bit transmit in Interrupt mode.
static void SPI_DMAHalfTransmitCplt(DMA_HandleTypeDef *hdma)
DMA SPI half transmit process complete callback.
static void SPI_2linesRxISR_16BIT(struct __SPI_HandleTypeDef *hspi)
Rx 16-bit handler for Transmit and Receive in Interrupt mode.
static void SPI_DMAHalfReceiveCplt(DMA_HandleTypeDef *hdma)
DMA SPI half receive process complete callback.
static void SPI_CloseRx_ISR(SPI_HandleTypeDef *hspi)
Handle the end of the RX transaction.
static void SPI_DMATransmitReceiveCplt(DMA_HandleTypeDef *hdma)
DMA SPI transmit receive process complete callback.
static void SPI_AbortTx_ISR(SPI_HandleTypeDef *hspi)
Handle abort a Tx or Rx/Tx transaction.
static void SPI_DMAError(DMA_HandleTypeDef *hdma)
DMA SPI communication error callback.
static void SPI_DMAAbortOnError(DMA_HandleTypeDef *hdma)
DMA SPI communication abort callback, when initiated by HAL services on Error (To be called at end of...
static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart)
Handle the check of the RX transaction complete.
static void SPI_RxISR_8BIT(struct __SPI_HandleTypeDef *hspi)
Manage the receive 8-bit in Interrupt context.
static void SPI_DMATxAbortCallback(DMA_HandleTypeDef *hdma)
DMA SPI Tx communication abort callback, when initiated by user (To be called at end of DMA Tx Abort ...
static void SPI_DMARxAbortCallback(DMA_HandleTypeDef *hdma)
DMA SPI Rx communication abort callback, when initiated by user (To be called at end of DMA Rx Abort ...
static void SPI_DMAReceiveCplt(DMA_HandleTypeDef *hdma)
DMA SPI receive process complete callback.
static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, FlagStatus State, uint32_t Timeout, uint32_t Tickstart)
Handle SPI Communication Timeout.
#define IS_SPI_CRC_POLYNOMIAL(__POLYNOMIAL__)
Checks if SPI polynomial value to be used for the CRC calculation, is in allowed range.
#define IS_SPI_MODE(__MODE__)
Checks if SPI Mode parameter is in allowed range.
#define IS_SPI_DIRECTION_2LINES_OR_1LINE(__MODE__)
Checks if SPI Direction Mode parameter is 1 or 2 lines.
#define IS_SPI_CRC_CALCULATION(__CALCULATION__)
Checks if SPI CRC calculation enabled state is in allowed range.
#define IS_SPI_DIRECTION(__MODE__)
Checks if SPI Direction Mode parameter is in allowed range.
#define IS_SPI_FIRST_BIT(__BIT__)
Checks if SPI MSB LSB transmission parameter is in allowed range.
#define IS_SPI_NSS(__NSS__)
Checks if SPI Slave Select parameter is in allowed range.
#define SPI_CHECK_IT_SOURCE(__CR2__, __INTERRUPT__)
Check whether the specified SPI Interrupt is set or not.
#define IS_SPI_TIMODE(__MODE__)
Checks if SPI TI mode parameter is in allowed range.
#define SPI_1LINE_RX(__HANDLE__)
Set the SPI receive-only mode.
#define SPI_RESET_CRC(__HANDLE__)
Reset the CRC calculation of the SPI.
#define IS_SPI_DATASIZE(__DATASIZE__)
Checks if SPI Data Size parameter is in allowed range.
#define IS_SPI_BAUDRATE_PRESCALER(__PRESCALER__)
Checks if SPI Baudrate prescaler parameter is in allowed range.
#define IS_SPI_CPOL(__CPOL__)
Checks if SPI Serial clock steady state parameter is in allowed range.
#define SPI_1LINE_TX(__HANDLE__)
Set the SPI transmit-only mode.
#define IS_SPI_DMA_HANDLE(__HANDLE__)
Checks if DMA handle is valid.
#define SPI_CHECK_FLAG(__SR__, __FLAG__)
Check whether the specified SPI flag is set or not.
#define IS_SPI_CPHA(__CPHA__)
Checks if SPI Clock Phase parameter is in allowed range.
#define IS_SPI_DIRECTION_2LINES(__MODE__)
Checks if SPI Direction Mode parameter is 2 lines.
#define SPI_TIMODE_DISABLE
#define assert_param(expr)
This file contains all the functions prototypes for the HAL module driver.
#define HAL_IS_BIT_SET(REG, BIT)
HAL_StatusTypeDef
HAL Status structures definition
#define __HAL_UNLOCK(__HANDLE__)
#define __HAL_LOCK(__HANDLE__)
uint32_t BaudRatePrescaler
DMA handle Structure definition.
void(* XferAbortCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)
DMA_Stream_TypeDef * Instance
SPI handle Structure definition.
DMA_HandleTypeDef * hdmarx
__IO uint16_t TxXferCount
void(* TxISR)(struct __SPI_HandleTypeDef *hspi)
void(* RxISR)(struct __SPI_HandleTypeDef *hspi)
__IO uint16_t RxXferCount
DMA_HandleTypeDef * hdmatx
__IO HAL_SPI_StateTypeDef State
const uint8_t * pTxBuffPtr