210 #ifdef HAL_SPI_MODULE_ENABLED
217 #define SPI_DEFAULT_TIMEOUT 100U
218 #define SPI_BSY_FLAG_WORKAROUND_TIMEOUT 1000U
239 static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(
SPI_HandleTypeDef *hspi, uint32_t Flag, FlagStatus State,
240 uint32_t Timeout, uint32_t Tickstart);
249 #if (USE_SPI_CRC != 0U)
260 static HAL_StatusTypeDef SPI_EndRxTransaction(
SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart);
261 static HAL_StatusTypeDef SPI_EndRxTxTransaction(
SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart);
320 assert_param(IS_SPI_ALL_INSTANCE(hspi->
Instance));
321 assert_param(IS_SPI_MODE(hspi->
Init.
Mode));
324 assert_param(IS_SPI_NSS(hspi->
Init.
NSS));
327 assert_param(IS_SPI_TIMODE(hspi->
Init.
TIMode));
333 if (hspi->
Init.
Mode == SPI_MODE_MASTER)
351 #if (USE_SPI_CRC != 0U)
364 hspi->
Lock = HAL_UNLOCKED;
366 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
393 __HAL_SPI_DISABLE(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);
446 assert_param(IS_SPI_ALL_INSTANCE(hspi->
Instance));
451 __HAL_SPI_DISABLE(hspi);
453 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
507 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
520 HAL_StatusTypeDef status = HAL_OK;
522 if (pCallback == NULL)
525 hspi->
ErrorCode |= HAL_SPI_ERROR_INVALID_CALLBACK;
578 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
599 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
609 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
630 HAL_StatusTypeDef status = HAL_OK;
681 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
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;
775 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->
Init.
Direction));
779 initial_TxXferCount = Size;
786 if ((pData == NULL) || (Size == 0U))
812 __HAL_SPI_DISABLE(hspi);
816 #if (USE_SPI_CRC != 0U)
825 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
828 __HAL_SPI_ENABLE(hspi);
834 if ((hspi->
Init.
Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U))
844 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE))
853 if ((((
HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U))
865 if ((hspi->
Init.
Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U))
874 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE))
883 if ((((
HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U))
892 #if (USE_SPI_CRC != 0U)
896 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
901 if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK)
909 __HAL_SPI_CLEAR_OVRFLAG(hspi);
916 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
937 #if (USE_SPI_CRC != 0U)
938 __IO uint32_t tmpreg = 0U;
957 if ((pData == NULL) || (Size == 0U))
979 #if (USE_SPI_CRC != 0U)
993 __HAL_SPI_DISABLE(hspi);
998 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1001 __HAL_SPI_ENABLE(hspi);
1011 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE))
1021 if ((((
HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U))
1036 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE))
1045 if ((((
HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U))
1055 #if (USE_SPI_CRC != 0U)
1060 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
1063 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK)
1082 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK)
1084 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
1091 tmpreg = READ_REG(hspi->
Instance->DR);
1098 if (SPI_EndRxTransaction(hspi, Timeout, tickstart) != HAL_OK)
1103 #if (USE_SPI_CRC != 0U)
1105 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR))
1107 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
1108 __HAL_SPI_CLEAR_CRCERRFLAG(hspi);
1115 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
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;
1150 assert_param(IS_SPI_DIRECTION_2LINES(hspi->
Init.
Direction));
1156 tmp_state = hspi->
State;
1158 initial_TxXferCount = Size;
1166 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
1193 #if (USE_SPI_CRC != 0U)
1197 SPI_RESET_CRC(hspi);
1202 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1205 __HAL_SPI_ENABLE(hspi);
1211 if ((hspi->
Init.
Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U))
1217 #if (USE_SPI_CRC != 0U)
1221 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
1229 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->
TxXferCount > 0U) && (txallowed == 1U))
1237 #if (USE_SPI_CRC != 0U)
1241 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
1247 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->
RxXferCount > 0U))
1255 if (((
HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY))
1266 if ((hspi->
Init.
Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U))
1272 #if (USE_SPI_CRC != 0U)
1276 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
1283 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->
TxXferCount > 0U) && (txallowed == 1U))
1291 #if (USE_SPI_CRC != 0U)
1295 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
1301 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->
RxXferCount > 0U))
1309 if ((((
HAL_GetTick() - tickstart) >= Timeout) && ((Timeout != HAL_MAX_DELAY))) || (Timeout == 0U))
1318 #if (USE_SPI_CRC != 0U)
1323 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, Timeout, tickstart) != HAL_OK)
1326 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
1332 tmpreg = READ_REG(hspi->
Instance->DR);
1338 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR))
1340 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
1342 __HAL_SPI_CLEAR_CRCERRFLAG(hspi);
1349 if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK)
1359 __HAL_SPI_CLEAR_OVRFLAG(hspi);
1367 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
1389 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->
Init.
Direction));
1392 if ((pData == NULL) || (Size == 0U))
1421 hspi->
TxISR = SPI_TxISR_16BIT;
1425 hspi->
TxISR = SPI_TxISR_8BIT;
1432 __HAL_SPI_DISABLE(hspi);
1436 #if (USE_SPI_CRC != 0U)
1440 SPI_RESET_CRC(hspi);
1445 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1448 __HAL_SPI_ENABLE(hspi);
1454 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR));
1483 if ((pData == NULL) || (Size == 0U))
1507 hspi->
RxISR = SPI_RxISR_16BIT;
1511 hspi->
RxISR = SPI_RxISR_8BIT;
1518 __HAL_SPI_DISABLE(hspi);
1522 #if (USE_SPI_CRC != 0U)
1526 SPI_RESET_CRC(hspi);
1535 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1538 __HAL_SPI_ENABLE(hspi);
1544 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
1565 assert_param(IS_SPI_DIRECTION_2LINES(hspi->
Init.
Direction));
1568 tmp_state = hspi->
State;
1577 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
1603 hspi->
RxISR = SPI_2linesRxISR_16BIT;
1604 hspi->
TxISR = SPI_2linesTxISR_16BIT;
1608 hspi->
RxISR = SPI_2linesRxISR_8BIT;
1609 hspi->
TxISR = SPI_2linesTxISR_8BIT;
1612 #if (USE_SPI_CRC != 0U)
1616 SPI_RESET_CRC(hspi);
1622 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1625 __HAL_SPI_ENABLE(hspi);
1631 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR));
1648 assert_param(IS_SPI_DMA_HANDLE(hspi->
hdmatx));
1651 assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->
Init.
Direction));
1658 if ((pData == NULL) || (Size == 0U))
1684 __HAL_SPI_DISABLE(hspi);
1688 #if (USE_SPI_CRC != 0U)
1692 SPI_RESET_CRC(hspi);
1713 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
1720 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1723 __HAL_SPI_ENABLE(hspi);
1730 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR));
1733 SET_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN);
1751 assert_param(IS_SPI_DMA_HANDLE(hspi->
hdmarx));
1763 assert_param(IS_SPI_DMA_HANDLE(hspi->
hdmatx));
1769 if ((pData == NULL) || (Size == 0U))
1794 __HAL_SPI_DISABLE(hspi);
1798 #if (USE_SPI_CRC != 0U)
1802 SPI_RESET_CRC(hspi);
1823 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
1830 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1833 __HAL_SPI_ENABLE(hspi);
1840 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR));
1843 SET_BIT(hspi->
Instance->CR2, SPI_CR2_RXDMAEN);
1865 assert_param(IS_SPI_DMA_HANDLE(hspi->
hdmarx));
1866 assert_param(IS_SPI_DMA_HANDLE(hspi->
hdmatx));
1869 assert_param(IS_SPI_DIRECTION_2LINES(hspi->
Init.
Direction));
1872 tmp_state = hspi->
State;
1881 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
1908 #if (USE_SPI_CRC != 0U)
1912 SPI_RESET_CRC(hspi);
1941 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
1948 SET_BIT(hspi->
Instance->CR2, SPI_CR2_RXDMAEN);
1962 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
1969 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1972 __HAL_SPI_ENABLE(hspi);
1979 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR));
1982 SET_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN);
2002 HAL_StatusTypeDef errorcode;
2003 __IO uint32_t count;
2004 __IO uint32_t resetcount;
2008 resetcount = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U);
2012 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_ERRIE);
2015 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_TXEIE))
2017 hspi->
TxISR = SPI_AbortTx_ISR;
2023 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
2032 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_RXNEIE))
2034 hspi->
RxISR = SPI_AbortRx_ISR;
2040 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
2050 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_TXDMAEN))
2053 if (hspi->
hdmatx != NULL)
2066 CLEAR_BIT(hspi->
Instance->CR2, (SPI_CR2_TXDMAEN));
2073 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
2077 }
while ((hspi->
Instance->SR & SPI_FLAG_TXE) == RESET);
2082 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_RXDMAEN))
2085 if (hspi->
hdmarx != NULL)
2098 __HAL_SPI_DISABLE(hspi);
2101 CLEAR_BIT(hspi->
Instance->CR2, (SPI_CR2_RXDMAEN));
2109 if (hspi->
ErrorCode == HAL_SPI_ERROR_ABORT)
2112 errorcode = HAL_ERROR;
2121 __HAL_SPI_CLEAR_OVRFLAG(hspi);
2122 __HAL_SPI_CLEAR_FREFLAG(hspi);
2147 HAL_StatusTypeDef errorcode;
2148 uint32_t abortcplt ;
2149 __IO uint32_t count;
2150 __IO uint32_t resetcount;
2155 resetcount = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U);
2159 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_ERRIE);
2162 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_TXEIE))
2164 hspi->
TxISR = SPI_AbortTx_ISR;
2170 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
2179 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_RXNEIE))
2181 hspi->
RxISR = SPI_AbortRx_ISR;
2187 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
2199 if (hspi->
hdmatx != NULL)
2203 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_TXDMAEN))
2213 if (hspi->
hdmarx != NULL)
2217 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_RXDMAEN))
2228 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_TXDMAEN))
2231 if (hspi->
hdmatx != NULL)
2246 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_RXDMAEN))
2249 if (hspi->
hdmarx != NULL)
2264 if (abortcplt == 1U)
2271 if (hspi->
ErrorCode == HAL_SPI_ERROR_ABORT)
2274 errorcode = HAL_ERROR;
2283 __HAL_SPI_CLEAR_OVRFLAG(hspi);
2284 __HAL_SPI_CLEAR_FREFLAG(hspi);
2290 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2312 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN);
2332 SET_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN);
2348 HAL_StatusTypeDef errorcode = HAL_OK;
2356 if (hspi->
hdmatx != NULL)
2360 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
2361 errorcode = HAL_ERROR;
2365 if (hspi->
hdmarx != NULL)
2369 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
2370 errorcode = HAL_ERROR;
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;
2392 if ((SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) == RESET) &&
2393 (SPI_CHECK_FLAG(itflag, SPI_FLAG_RXNE) != RESET) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_RXNE) != RESET))
2400 if ((SPI_CHECK_FLAG(itflag, SPI_FLAG_TXE) != RESET) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_TXE) != RESET))
2407 if (((SPI_CHECK_FLAG(itflag, SPI_FLAG_MODF) != RESET) || (SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) != RESET)
2408 || (SPI_CHECK_FLAG(itflag, SPI_FLAG_FRE) != RESET)) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_ERR) != RESET))
2411 if (SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) != RESET)
2415 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_OVR);
2416 __HAL_SPI_CLEAR_OVRFLAG(hspi);
2420 __HAL_SPI_CLEAR_OVRFLAG(hspi);
2426 if (SPI_CHECK_FLAG(itflag, SPI_FLAG_MODF) != RESET)
2428 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_MODF);
2429 __HAL_SPI_CLEAR_MODFFLAG(hspi);
2433 if (SPI_CHECK_FLAG(itflag, SPI_FLAG_FRE) != RESET)
2435 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FRE);
2436 __HAL_SPI_CLEAR_FREFLAG(hspi);
2439 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
2442 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE | SPI_IT_TXE | SPI_IT_ERR);
2446 if ((HAL_IS_BIT_SET(itsource, SPI_CR2_TXDMAEN)) || (HAL_IS_BIT_SET(itsource, SPI_CR2_RXDMAEN)))
2448 CLEAR_BIT(hspi->
Instance->CR2, (SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN));
2451 if (hspi->
hdmarx != NULL)
2458 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
2462 if (hspi->
hdmatx != NULL)
2469 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
2476 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2688 if ((hdma->
Instance->CR & DMA_SxCR_CIRC) != DMA_SxCR_CIRC)
2691 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR);
2694 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN);
2697 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK)
2699 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
2705 __HAL_SPI_CLEAR_OVRFLAG(hspi);
2711 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
2714 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2723 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2740 #if (USE_SPI_CRC != 0U)
2741 __IO uint32_t tmpreg = 0U;
2748 if ((hdma->
Instance->CR & DMA_SxCR_CIRC) != DMA_SxCR_CIRC)
2751 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR);
2753 #if (USE_SPI_CRC != 0U)
2758 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK)
2761 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
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);
2783 if (SPI_EndRxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK)
2791 #if (USE_SPI_CRC != 0U)
2793 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR))
2795 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
2796 __HAL_SPI_CLEAR_CRCERRFLAG(hspi);
2800 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
2803 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2812 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2829 #if (USE_SPI_CRC != 0U)
2830 __IO uint32_t tmpreg = 0U;
2837 if ((hdma->
Instance->CR & DMA_SxCR_CIRC) != DMA_SxCR_CIRC)
2840 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR);
2842 #if (USE_SPI_CRC != 0U)
2847 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, SET, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK)
2849 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
2852 tmpreg = READ_REG(hspi->
Instance->DR);
2859 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK)
2861 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
2865 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN);
2871 #if (USE_SPI_CRC != 0U)
2873 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR))
2875 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
2876 __HAL_SPI_CLEAR_CRCERRFLAG(hspi);
2880 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
2883 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2892 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2910 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2928 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2946 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2964 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN);
2966 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
2969 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
2989 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3007 __IO uint32_t count;
3010 count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U);
3013 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN);
3020 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
3024 }
while ((hspi->
Instance->SR & SPI_FLAG_TXE) == RESET);
3027 if (hspi->
hdmarx != NULL)
3040 if (hspi->
ErrorCode != HAL_SPI_ERROR_ABORT)
3047 __HAL_SPI_CLEAR_OVRFLAG(hspi);
3048 __HAL_SPI_CLEAR_FREFLAG(hspi);
3054 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3074 __HAL_SPI_DISABLE(hspi);
3079 CLEAR_BIT(hspi->
Instance->CR2, SPI_CR2_RXDMAEN);
3082 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT,
HAL_GetTick()) != HAL_OK)
3084 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
3088 if (hspi->
hdmatx != NULL)
3101 if (hspi->
ErrorCode != HAL_SPI_ERROR_ABORT)
3108 __HAL_SPI_CLEAR_OVRFLAG(hspi);
3109 __HAL_SPI_CLEAR_FREFLAG(hspi);
3115 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3138 #if (USE_SPI_CRC != 0U)
3141 hspi->
RxISR = SPI_2linesRxISR_8BITCRC;
3147 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
3151 SPI_CloseRxTx_ISR(hspi);
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;
3176 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
3180 SPI_CloseRxTx_ISR(hspi);
3200 #if (USE_SPI_CRC != 0U)
3204 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3206 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE);
3212 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE);
3216 SPI_CloseRxTx_ISR(hspi);
3236 #if (USE_SPI_CRC != 0U)
3239 hspi->
RxISR = SPI_2linesRxISR_16BITCRC;
3245 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE);
3249 SPI_CloseRxTx_ISR(hspi);
3254 #if (USE_SPI_CRC != 0U)
3263 __IO uint32_t tmpreg = 0U;
3266 tmpreg = READ_REG(hspi->
Instance->DR);
3271 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE);
3273 SPI_CloseRxTx_ISR(hspi);
3293 #if (USE_SPI_CRC != 0U)
3297 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3299 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE);
3305 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE);
3309 SPI_CloseRxTx_ISR(hspi);
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;
3333 SPI_CloseRx_ISR(hspi);
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;
3366 SPI_CloseRx_ISR(hspi);
3370 #if (USE_SPI_CRC != 0U)
3379 __IO uint32_t tmpreg = 0U;
3382 tmpreg = READ_REG(hspi->
Instance->DR);
3387 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
3389 SPI_CloseRx_ISR(hspi);
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;
3422 SPI_CloseRx_ISR(hspi);
3440 #if (USE_SPI_CRC != 0U)
3444 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3447 SPI_CloseTx_ISR(hspi);
3466 #if (USE_SPI_CRC != 0U)
3470 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3473 SPI_CloseTx_ISR(hspi);
3487 static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(
SPI_HandleTypeDef *hspi, uint32_t Flag, FlagStatus State,
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);
3501 while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) != State)
3503 if (Timeout != HAL_MAX_DELAY)
3505 if (((
HAL_GetTick() - tmp_tickstart) >= tmp_timeout) || (tmp_timeout == 0U))
3512 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR));
3518 __HAL_SPI_DISABLE(hspi);
3524 SPI_RESET_CRC(hspi);
3554 static HAL_StatusTypeDef SPI_EndRxTransaction(
SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart)
3560 __HAL_SPI_DISABLE(hspi);
3564 if (hspi->
Init.
Mode == SPI_MODE_MASTER)
3569 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK)
3571 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3578 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, RESET, Timeout, Tickstart) != HAL_OK)
3580 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3588 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, RESET, Timeout, Tickstart) != HAL_OK)
3590 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3604 static HAL_StatusTypeDef SPI_EndRxTxTransaction(
SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart)
3607 if(SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_TXE, SET, Timeout, Tickstart) != HAL_OK)
3609 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3614 __IO uint32_t count = SPI_BSY_FLAG_WORKAROUND_TIMEOUT * (SystemCoreClock / 24U / 1000000U);
3616 if (hspi->
Init.
Mode == SPI_MODE_MASTER)
3619 if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK)
3621 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3639 }
while (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_BSY) != RESET);
3654 __IO uint32_t count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U);
3660 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR);
3667 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3671 }
while ((hspi->
Instance->SR & SPI_FLAG_TXE) == RESET);
3674 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK)
3676 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3682 __HAL_SPI_CLEAR_OVRFLAG(hspi);
3685 #if (USE_SPI_CRC != 0U)
3687 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET)
3690 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
3691 __HAL_SPI_CLEAR_CRCERRFLAG(hspi);
3693 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3702 if (hspi->
ErrorCode == HAL_SPI_ERROR_NONE)
3708 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3718 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3729 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3735 #if (USE_SPI_CRC != 0U)
3749 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
3752 if (SPI_EndRxTransaction(hspi, SPI_DEFAULT_TIMEOUT,
HAL_GetTick()) != HAL_OK)
3754 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3760 __HAL_SPI_CLEAR_OVRFLAG(hspi);
3764 #if (USE_SPI_CRC != 0U)
3766 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET)
3768 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
3769 __HAL_SPI_CLEAR_CRCERRFLAG(hspi);
3771 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3780 if (hspi->
ErrorCode == HAL_SPI_ERROR_NONE)
3783 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3792 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3798 #if (USE_SPI_CRC != 0U)
3812 __IO uint32_t count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U);
3822 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3826 }
while ((hspi->
Instance->SR & SPI_FLAG_TXE) == RESET);
3829 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR));
3832 if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK)
3834 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3840 __HAL_SPI_CLEAR_OVRFLAG(hspi);
3844 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
3847 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3856 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
3872 __IO uint32_t tmpreg = 0U;
3873 __IO uint32_t count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U);
3880 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
3884 }
while ((hspi->
Instance->SR & SPI_FLAG_TXE) == RESET);
3887 __HAL_SPI_DISABLE(hspi);
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));
3912 __HAL_SPI_DISABLE(hspi);
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.
HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID)
Unregister an SPI Callback SPI callback is redirected to the weak predefined callback.
HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID, pSPI_CallbackTypeDef pCallback)
Register a User SPI Callback To be used instead of the weak predefined callback.
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.
DMA_HandleTypeDef * hdmarx
__IO uint16_t TxXferCount
uint32_t BaudRatePrescaler
void(* TxRxCpltCallback)(struct __SPI_HandleTypeDef *hspi)
void(* ErrorCallback)(struct __SPI_HandleTypeDef *hspi)
void(* TxISR)(struct __SPI_HandleTypeDef *hspi)
void(* RxISR)(struct __SPI_HandleTypeDef *hspi)
__IO uint16_t RxXferCount
void(* AbortCpltCallback)(struct __SPI_HandleTypeDef *hspi)
void(* TxRxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi)
void(* RxCpltCallback)(struct __SPI_HandleTypeDef *hspi)
DMA_HandleTypeDef * hdmatx
__IO HAL_SPI_StateTypeDef State
void(* TxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi)
const uint8_t * pTxBuffPtr
void(* RxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi)
void(* MspInitCallback)(struct __SPI_HandleTypeDef *hspi)
void(* MspDeInitCallback)(struct __SPI_HandleTypeDef *hspi)
void(* TxCpltCallback)(struct __SPI_HandleTypeDef *hspi)
HAL_SPI_StateTypeDef
HAL SPI State structure definition.
HAL_SPI_CallbackIDTypeDef
HAL SPI Callback ID enumeration definition.
void(* pSPI_CallbackTypeDef)(SPI_HandleTypeDef *hspi)
HAL SPI Callback pointer definition.
@ HAL_SPI_STATE_BUSY_TX_RX
@ HAL_SPI_RX_COMPLETE_CB_ID
@ HAL_SPI_TX_RX_COMPLETE_CB_ID
@ HAL_SPI_MSPDEINIT_CB_ID
@ HAL_SPI_TX_HALF_COMPLETE_CB_ID
@ HAL_SPI_RX_HALF_COMPLETE_CB_ID
@ HAL_SPI_TX_COMPLETE_CB_ID
@ HAL_SPI_TX_RX_HALF_COMPLETE_CB_ID
SPI handle Structure definition.
This file contains all the functions prototypes for the HAL module driver.
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