209 #ifdef HAL_SPI_MODULE_ENABLED 216 #define SPI_DEFAULT_TIMEOUT 100U 238 uint32_t Timeout, uint32_t Tickstart);
240 uint32_t Timeout, uint32_t Tickstart);
249 #if (USE_SPI_CRC != 0U) 338 #if (USE_SPI_CRC != 0U) 354 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 381 __HAL_SPI_DISABLE(hspi);
386 frxth = SPI_RXFIFO_THRESHOLD_HF;
390 frxth = SPI_RXFIFO_THRESHOLD_QF;
420 #if (USE_SPI_CRC != 0U) 424 hspi->
Instance->CR1 |= SPI_CR1_CRCL;
432 #if (USE_SPI_CRC != 0U) 441 #if defined(SPI_I2SCFGR_I2SMOD) 472 __HAL_SPI_DISABLE(hspi);
474 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 528 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 540 HAL_StatusTypeDef status =
HAL_OK;
542 if (pCallback == NULL)
545 hspi->
ErrorCode |= HAL_SPI_ERROR_INVALID_CALLBACK;
598 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
619 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
629 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
650 HAL_StatusTypeDef status =
HAL_OK;
701 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
722 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
732 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_INVALID_CALLBACK);
792 HAL_StatusTypeDef errorcode =
HAL_OK;
793 uint16_t initial_TxXferCount;
803 initial_TxXferCount = Size;
807 errorcode = HAL_BUSY;
811 if ((pData == NULL) || (Size == 0U))
813 errorcode = HAL_ERROR;
837 #if (USE_SPI_CRC != 0U) 846 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
849 __HAL_SPI_ENABLE(hspi);
855 if ((hspi->
Init.
Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U))
865 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE))
874 if ((((
HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U))
876 errorcode = HAL_TIMEOUT;
885 if ((hspi->
Init.
Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U))
904 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE))
923 if ((((
HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U))
925 errorcode = HAL_TIMEOUT;
931 #if (USE_SPI_CRC != 0U) 935 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
948 __HAL_SPI_CLEAR_OVRFLAG(hspi);
951 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
953 errorcode = HAL_ERROR;
975 HAL_StatusTypeDef errorcode =
HAL_OK;
992 errorcode = HAL_BUSY;
996 if ((pData == NULL) || (Size == 0U))
998 errorcode = HAL_ERROR;
1016 #if (USE_SPI_CRC != 0U) 1020 SPI_RESET_CRC(hspi);
1035 SET_BIT(hspi->
Instance->CR2, SPI_RXFIFO_THRESHOLD);
1045 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1048 __HAL_SPI_ENABLE(hspi);
1058 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE))
1068 if ((((
HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U))
1070 errorcode = HAL_TIMEOUT;
1082 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE))
1091 if ((((
HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U))
1093 errorcode = HAL_TIMEOUT;
1100 #if (USE_SPI_CRC != 0U) 1105 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
1111 errorcode = HAL_TIMEOUT;
1129 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
1130 errorcode = HAL_TIMEOUT;
1143 READ_REG(*(__IO uint8_t *)&hspi->
Instance->DR);
1150 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
1151 errorcode = HAL_TIMEOUT;
1155 READ_REG(*(__IO uint8_t *)&hspi->
Instance->DR);
1167 #if (USE_SPI_CRC != 0U) 1169 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR))
1171 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
1172 __HAL_SPI_CLEAR_CRCERRFLAG(hspi);
1176 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
1178 errorcode = HAL_ERROR;
1200 uint16_t initial_TxXferCount;
1201 uint16_t initial_RxXferCount;
1205 #if (USE_SPI_CRC != 0U) 1211 uint32_t txallowed = 1U;
1212 HAL_StatusTypeDef errorcode =
HAL_OK;
1224 tmp_state = hspi->
State;
1226 initial_TxXferCount = Size;
1227 initial_RxXferCount = Size;
1228 #if (USE_SPI_CRC != 0U) 1229 spi_cr1 = READ_REG(hspi->
Instance->CR1);
1230 spi_cr2 = READ_REG(hspi->
Instance->CR2);
1236 errorcode = HAL_BUSY;
1240 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
1242 errorcode = HAL_ERROR;
1265 #if (USE_SPI_CRC != 0U) 1269 SPI_RESET_CRC(hspi);
1274 if ((hspi->
Init.
DataSize > SPI_DATASIZE_8BIT) || (initial_RxXferCount > 1U))
1282 SET_BIT(hspi->
Instance->CR2, SPI_RXFIFO_THRESHOLD);
1286 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1289 __HAL_SPI_ENABLE(hspi);
1295 if ((hspi->
Init.
Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U))
1304 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->
TxXferCount > 0U) && (txallowed == 1U))
1312 #if (USE_SPI_CRC != 0U) 1317 if ((READ_BIT(spi_cr1, SPI_CR1_MSTR) == 0U) && (READ_BIT(spi_cr2, SPI_CR2_NSSP) == SPI_CR2_NSSP))
1319 SET_BIT(hspi->
Instance->CR1, SPI_CR1_SSM);
1321 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
1327 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->
RxXferCount > 0U))
1335 if (((
HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY))
1337 errorcode = HAL_TIMEOUT;
1345 if ((hspi->
Init.
Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U))
1363 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->
TxXferCount > 0U) && (txallowed == 1U))
1380 #if (USE_SPI_CRC != 0U) 1385 if ((READ_BIT(spi_cr1, SPI_CR1_MSTR) == 0U) && (READ_BIT(spi_cr2, SPI_CR2_NSSP) == SPI_CR2_NSSP))
1387 SET_BIT(hspi->
Instance->CR1, SPI_CR1_SSM);
1389 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
1395 if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->
RxXferCount > 0U))
1405 SET_BIT(hspi->
Instance->CR2, SPI_RXFIFO_THRESHOLD);
1417 if ((((
HAL_GetTick() - tickstart) >= Timeout) && ((Timeout != HAL_MAX_DELAY))) || (Timeout == 0U))
1419 errorcode = HAL_TIMEOUT;
1425 #if (USE_SPI_CRC != 0U) 1433 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
1434 errorcode = HAL_TIMEOUT;
1446 READ_REG(*(__IO uint8_t *)&hspi->
Instance->DR);
1453 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
1454 errorcode = HAL_TIMEOUT;
1458 READ_REG(*(__IO uint8_t *)&hspi->
Instance->DR);
1464 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR))
1466 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
1468 __HAL_SPI_CLEAR_CRCERRFLAG(hspi);
1470 errorcode = HAL_ERROR;
1477 errorcode = HAL_ERROR;
1497 HAL_StatusTypeDef errorcode =
HAL_OK;
1505 if ((pData == NULL) || (Size == 0U))
1507 errorcode = HAL_ERROR;
1513 errorcode = HAL_BUSY;
1546 #if (USE_SPI_CRC != 0U) 1550 SPI_RESET_CRC(hspi);
1555 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR));
1559 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1562 __HAL_SPI_ENABLE(hspi);
1580 HAL_StatusTypeDef errorcode =
HAL_OK;
1594 errorcode = HAL_BUSY;
1598 if ((pData == NULL) || (Size == 0U))
1600 errorcode = HAL_ERROR;
1627 SET_BIT(hspi->
Instance->CR2, SPI_RXFIFO_THRESHOLD);
1637 #if (USE_SPI_CRC != 0U) 1646 SPI_RESET_CRC(hspi);
1655 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
1662 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1665 __HAL_SPI_ENABLE(hspi);
1687 HAL_StatusTypeDef errorcode =
HAL_OK;
1696 tmp_state = hspi->
State;
1702 errorcode = HAL_BUSY;
1706 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
1708 errorcode = HAL_ERROR;
1739 #if (USE_SPI_CRC != 0U) 1748 SPI_RESET_CRC(hspi);
1757 if ((hspi->
Init.
DataSize > SPI_DATASIZE_8BIT) || (Size >= 2U))
1765 SET_BIT(hspi->
Instance->CR2, SPI_RXFIFO_THRESHOLD);
1769 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR));
1772 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1775 __HAL_SPI_ENABLE(hspi);
1794 HAL_StatusTypeDef errorcode =
HAL_OK;
1807 errorcode = HAL_BUSY;
1811 if ((pData == NULL) || (Size == 0U))
1813 errorcode = HAL_ERROR;
1837 #if (USE_SPI_CRC != 0U) 1841 SPI_RESET_CRC(hspi);
1859 if ((hspi->
Init.
DataSize <= SPI_DATASIZE_8BIT) && (hspi->
hdmatx->
Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD))
1869 SET_BIT(hspi->
Instance->CR2, SPI_CR2_LDMATX);
1878 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
1879 errorcode = HAL_ERROR;
1886 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1889 __HAL_SPI_ENABLE(hspi);
1893 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR));
1896 SET_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN);
1916 HAL_StatusTypeDef errorcode =
HAL_OK;
1937 errorcode = HAL_BUSY;
1941 if ((pData == NULL) || (Size == 0U))
1943 errorcode = HAL_ERROR;
1966 #if (USE_SPI_CRC != 0U) 1970 SPI_RESET_CRC(hspi);
1984 SET_BIT(hspi->
Instance->CR2, SPI_RXFIFO_THRESHOLD);
1986 if (hspi->
hdmarx->
Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD)
1998 SET_BIT(hspi->
Instance->CR2, SPI_CR2_LDMARX);
2020 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
2021 errorcode = HAL_ERROR;
2028 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
2031 __HAL_SPI_ENABLE(hspi);
2035 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR));
2038 SET_BIT(hspi->
Instance->CR2, SPI_CR2_RXDMAEN);
2061 HAL_StatusTypeDef errorcode =
HAL_OK;
2074 tmp_state = hspi->
State;
2080 errorcode = HAL_BUSY;
2084 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
2086 errorcode = HAL_ERROR;
2109 #if (USE_SPI_CRC != 0U) 2113 SPI_RESET_CRC(hspi);
2129 SET_BIT(hspi->
Instance->CR2, SPI_RXFIFO_THRESHOLD);
2131 if (hspi->
hdmatx->
Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD)
2140 SET_BIT(hspi->
Instance->CR2, SPI_CR2_LDMATX);
2145 if (hspi->
hdmarx->
Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD)
2157 SET_BIT(hspi->
Instance->CR2, SPI_CR2_LDMARX);
2187 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
2188 errorcode = HAL_ERROR;
2195 SET_BIT(hspi->
Instance->CR2, SPI_CR2_RXDMAEN);
2208 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
2209 errorcode = HAL_ERROR;
2216 if ((hspi->
Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
2219 __HAL_SPI_ENABLE(hspi);
2222 __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_ERR));
2225 SET_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN);
2248 HAL_StatusTypeDef errorcode;
2249 __IO uint32_t count, resetcount;
2253 resetcount = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U);
2260 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_TXEIE))
2268 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
2278 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_RXNEIE))
2286 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
2297 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_TXDMAEN))
2300 if (hspi->
hdmatx != NULL)
2321 __HAL_SPI_DISABLE(hspi);
2332 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_RXDMAEN))
2335 if (hspi->
hdmarx != NULL)
2348 __HAL_SPI_DISABLE(hspi);
2371 if (hspi->
ErrorCode == HAL_SPI_ERROR_ABORT)
2374 errorcode = HAL_ERROR;
2383 __HAL_SPI_CLEAR_OVRFLAG(hspi);
2384 __HAL_SPI_CLEAR_FREFLAG(hspi);
2409 HAL_StatusTypeDef errorcode;
2410 uint32_t abortcplt ;
2411 __IO uint32_t count, resetcount;
2416 resetcount = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U);
2423 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_TXEIE))
2431 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
2441 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_RXNEIE))
2449 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
2462 if (hspi->
hdmatx != NULL)
2466 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_TXDMAEN))
2476 if (hspi->
hdmarx != NULL)
2480 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_RXDMAEN))
2491 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_TXDMAEN))
2494 if (hspi->
hdmatx != NULL)
2509 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_RXDMAEN))
2512 if (hspi->
hdmarx != NULL)
2527 if (abortcplt == 1U)
2534 if (hspi->
ErrorCode == HAL_SPI_ERROR_ABORT)
2537 errorcode = HAL_ERROR;
2546 __HAL_SPI_CLEAR_OVRFLAG(hspi);
2547 __HAL_SPI_CLEAR_FREFLAG(hspi);
2553 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 2595 SET_BIT(hspi->
Instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN);
2611 HAL_StatusTypeDef errorcode =
HAL_OK;
2619 if (hspi->
hdmatx != NULL)
2623 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
2624 errorcode = HAL_ERROR;
2628 if (hspi->
hdmarx != NULL)
2632 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
2633 errorcode = HAL_ERROR;
2651 uint32_t itsource = hspi->
Instance->CR2;
2652 uint32_t itflag = hspi->
Instance->SR;
2655 if ((SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) == RESET) &&
2656 (SPI_CHECK_FLAG(itflag, SPI_FLAG_RXNE) != RESET) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_RXNE) != RESET))
2663 if ((SPI_CHECK_FLAG(itflag, SPI_FLAG_TXE) != RESET) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_TXE) != RESET))
2670 if (((SPI_CHECK_FLAG(itflag, SPI_FLAG_MODF) != RESET) || (SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) != RESET) || (SPI_CHECK_FLAG(itflag, SPI_FLAG_FRE) != RESET)) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_ERR) != RESET))
2673 if (SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) != RESET)
2677 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_OVR);
2678 __HAL_SPI_CLEAR_OVRFLAG(hspi);
2682 __HAL_SPI_CLEAR_OVRFLAG(hspi);
2688 if (SPI_CHECK_FLAG(itflag, SPI_FLAG_MODF) != RESET)
2690 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_MODF);
2691 __HAL_SPI_CLEAR_MODFFLAG(hspi);
2695 if (SPI_CHECK_FLAG(itflag, SPI_FLAG_FRE) != RESET)
2697 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FRE);
2698 __HAL_SPI_CLEAR_FREFLAG(hspi);
2701 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
2704 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE | SPI_IT_TXE | SPI_IT_ERR);
2708 if ((HAL_IS_BIT_SET(itsource, SPI_CR2_TXDMAEN)) || (HAL_IS_BIT_SET(itsource, SPI_CR2_RXDMAEN)))
2713 if (hspi->
hdmarx != NULL)
2720 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
2724 if (hspi->
hdmatx != NULL)
2731 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
2738 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 2950 if ((hdma->
Instance->CCR & DMA_CCR_CIRC) != DMA_CCR_CIRC)
2953 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR);
2961 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
2967 __HAL_SPI_CLEAR_OVRFLAG(hspi);
2973 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
2976 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 2985 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 3007 if ((hdma->
Instance->CCR & DMA_CCR_CIRC) != DMA_CCR_CIRC)
3010 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR);
3012 #if (USE_SPI_CRC != 0U) 3020 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
3031 READ_REG(*(__IO uint8_t *)&hspi->
Instance->DR);
3038 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
3041 READ_REG(*(__IO uint8_t *)&hspi->
Instance->DR);
3059 #if (USE_SPI_CRC != 0U) 3061 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR))
3063 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
3064 __HAL_SPI_CLEAR_CRCERRFLAG(hspi);
3068 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
3071 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 3080 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 3102 if ((hdma->
Instance->CCR & DMA_CCR_CIRC) != DMA_CCR_CIRC)
3105 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR);
3107 #if (USE_SPI_CRC != 0U) 3117 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
3120 READ_REG(*(__IO uint8_t *)&hspi->
Instance->DR);
3127 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
3138 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3148 #if (USE_SPI_CRC != 0U) 3150 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR))
3152 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
3153 __HAL_SPI_CLEAR_CRCERRFLAG(hspi);
3157 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
3160 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 3169 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 3187 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 3205 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 3223 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 3243 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_DMA);
3246 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 3266 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 3296 __HAL_SPI_DISABLE(hspi);
3305 if (hspi->
hdmarx != NULL)
3318 if (hspi->
ErrorCode != HAL_SPI_ERROR_ABORT)
3325 __HAL_SPI_CLEAR_OVRFLAG(hspi);
3326 __HAL_SPI_CLEAR_FREFLAG(hspi);
3332 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 3352 __HAL_SPI_DISABLE(hspi);
3372 if (hspi->
hdmatx != NULL)
3385 if (hspi->
ErrorCode != HAL_SPI_ERROR_ABORT)
3392 __HAL_SPI_CLEAR_OVRFLAG(hspi);
3393 __HAL_SPI_CLEAR_FREFLAG(hspi);
3399 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 3423 SET_BIT(hspi->
Instance->CR2, SPI_RXFIFO_THRESHOLD);
3437 #if (USE_SPI_CRC != 0U) 3440 SET_BIT(hspi->
Instance->CR2, SPI_RXFIFO_THRESHOLD);
3447 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
3456 #if (USE_SPI_CRC != 0U) 3466 READ_REG(*(__IO uint8_t *)&hspi->
Instance->DR);
3474 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
3510 #if (USE_SPI_CRC != 0U) 3514 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3516 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE);
3522 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE);
3546 #if (USE_SPI_CRC != 0U) 3555 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE);
3564 #if (USE_SPI_CRC != 0U) 3577 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE);
3599 #if (USE_SPI_CRC != 0U) 3603 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3605 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE);
3611 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_TXE);
3620 #if (USE_SPI_CRC != 0U) 3630 READ_REG(*(__IO uint8_t *)&hspi->
Instance->DR);
3653 #if (USE_SPI_CRC != 0U) 3657 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3663 #if (USE_SPI_CRC != 0U) 3674 #if (USE_SPI_CRC != 0U) 3687 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
3705 #if (USE_SPI_CRC != 0U) 3709 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3715 #if (USE_SPI_CRC != 0U) 3740 #if (USE_SPI_CRC != 0U) 3744 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3766 #if (USE_SPI_CRC != 0U) 3770 SET_BIT(hspi->
Instance->CR1, SPI_CR1_CRCNEXT);
3788 uint32_t Timeout, uint32_t Tickstart)
3790 while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) != State)
3792 if (Timeout != HAL_MAX_DELAY)
3794 if (((
HAL_GetTick() - Tickstart) >= Timeout) || (Timeout == 0U))
3801 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR));
3807 __HAL_SPI_DISABLE(hspi);
3813 SPI_RESET_CRC(hspi);
3840 uint32_t Timeout, uint32_t Tickstart)
3842 while ((hspi->
Instance->SR & Fifo) != State)
3844 if ((Fifo == SPI_SR_FRLVL) && (State == SPI_FRLVL_EMPTY))
3847 READ_REG(*((__IO uint8_t *)&hspi->
Instance->DR));
3850 if (Timeout != HAL_MAX_DELAY)
3852 if (((
HAL_GetTick() - Tickstart) >= Timeout) || (Timeout == 0U))
3859 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR));
3865 __HAL_SPI_DISABLE(hspi);
3871 SPI_RESET_CRC(hspi);
3901 __HAL_SPI_DISABLE(hspi);
3907 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3917 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3936 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3943 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3950 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3971 __HAL_SPI_DISABLE_IT(hspi, SPI_IT_ERR);
3976 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
3979 #if (USE_SPI_CRC != 0U) 3981 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET)
3984 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
3985 __HAL_SPI_CLEAR_CRCERRFLAG(hspi);
3987 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 3996 if (hspi->
ErrorCode == HAL_SPI_ERROR_NONE)
4002 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 4012 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 4023 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 4029 #if (USE_SPI_CRC != 0U) 4043 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_RXNE | SPI_IT_ERR));
4048 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
4052 #if (USE_SPI_CRC != 0U) 4054 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_CRCERR) != RESET)
4056 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_CRC);
4057 __HAL_SPI_CLEAR_CRCERRFLAG(hspi);
4059 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 4068 if (hspi->
ErrorCode == HAL_SPI_ERROR_NONE)
4071 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 4080 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 4086 #if (USE_SPI_CRC != 0U) 4105 __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR));
4110 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_FLAG);
4116 __HAL_SPI_CLEAR_OVRFLAG(hspi);
4120 if (hspi->
ErrorCode != HAL_SPI_ERROR_NONE)
4123 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 4132 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 4148 __IO uint32_t count;
4151 __HAL_SPI_DISABLE(hspi);
4153 count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U);
4163 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
4168 while (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_RXNEIE));
4193 __IO uint32_t count;
4195 count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U);
4205 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
4210 while (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_TXEIE));
4218 __HAL_SPI_DISABLE(hspi);
4227 if (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_RXNEIE))
4237 SET_BIT(hspi->
ErrorCode, HAL_SPI_ERROR_ABORT);
4242 while (HAL_IS_BIT_SET(hspi->
Instance->CR2, SPI_CR2_RXNEIE));
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.
void(* ErrorCallback)(struct __SPI_HandleTypeDef *hspi)
HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi)
Abort ongoing transfer (Interrupt mode).
HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size)
Transmit an amount of data in non-blocking mode with Interrupt.
void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi)
SPI error callback.
HAL_SPI_StateTypeDef
HAL SPI State structure definition.
HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi)
Stop the DMA Transfer.
static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, FlagStatus State, uint32_t Timeout, uint32_t Tickstart)
Handle SPI Communication Timeout.
void(* XferAbortCallback)(struct __DMA_HandleTypeDef *hdma)
static void SPI_DMATransmitReceiveCplt(DMA_HandleTypeDef *hdma)
DMA SPI transmit receive process complete callback.
static void SPI_2linesRxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi)
Rx 8-bit handler for Transmit and Receive in Interrupt mode.
static void SPI_DMAReceiveCplt(DMA_HandleTypeDef *hdma)
DMA SPI receive process complete callback.
void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi)
SPI Abort Complete callback.
DMA handle Structure definition.
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
static void SPI_RxISR_16BIT(struct __SPI_HandleTypeDef *hspi)
Manage the 16-bit receive in Interrupt context.
static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi)
Handle abort a Rx transaction.
static HAL_StatusTypeDef SPI_WaitFifoStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Fifo, uint32_t State, uint32_t Timeout, uint32_t Tickstart)
Handle SPI FIFO Communication Timeout.
void(* TxRxCpltCallback)(struct __SPI_HandleTypeDef *hspi)
This file contains all the functions prototypes for the HAL module driver.
static void SPI_RxISR_8BIT(struct __SPI_HandleTypeDef *hspi)
Manage the receive 8-bit in Interrupt context.
HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi)
Abort ongoing transfer (blocking mode).
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.
static void SPI_CloseRx_ISR(SPI_HandleTypeDef *hspi)
Handle the end of the RX transaction.
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Transmit an amount of data in blocking mode.
void(* MspDeInitCallback)(struct __SPI_HandleTypeDef *hspi)
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.
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
DMA_Channel_TypeDef * Instance
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
Initialize the SPI MSP.
static void SPI_2linesTxISR_16BIT(struct __SPI_HandleTypeDef *hspi)
Tx 16-bit handler for Transmit and Receive in Interrupt mode.
DMA_HandleTypeDef * hdmatx
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer in Interrupt mode.
uint32_t BaudRatePrescaler
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)
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_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi)
Rx 8-bit handler for Transmit and Receive in Interrupt mode.
void(* pSPI_CallbackTypeDef)(SPI_HandleTypeDef *hspi)
HAL SPI Callback pointer definition.
void(* RxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi)
static void SPI_2linesRxISR_16BIT(struct __SPI_HandleTypeDef *hspi)
Rx 16-bit handler for Transmit and Receive in Interrupt mode.
static void SPI_DMAError(DMA_HandleTypeDef *hdma)
DMA SPI communication error callback.
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.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
static void SPI_TxISR_16BIT(struct __SPI_HandleTypeDef *hspi)
Handle the data 16-bit transmit in Interrupt mode.
void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi)
Handle SPI interrupt request.
void(* AbortCpltCallback)(struct __SPI_HandleTypeDef *hspi)
void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi)
Tx and Rx Half Transfer callback.
void(* TxRxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi)
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
Tx and Rx Transfer completed callback.
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
Tx Transfer completed callback.
HAL_SPI_CallbackIDTypeDef
HAL SPI Callback ID enumeration definition.
static void SPI_2linesTxISR_8BIT(struct __SPI_HandleTypeDef *hspi)
Tx 8-bit handler for Transmit and Receive in Interrupt mode.
HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi)
Return the SPI handle state.
static void SPI_DMAHalfReceiveCplt(DMA_HandleTypeDef *hdma)
DMA SPI half receive process complete callback.
void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi)
De-Initialize the SPI MSP.
static void SPI_AbortTx_ISR(SPI_HandleTypeDef *hspi)
Handle abort a Tx or Rx/Tx transaction.
static void SPI_RxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi)
Manage the CRC 8-bit receive in Interrupt context.
DMA_HandleTypeDef * hdmarx
HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, 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_DMA_Abort(DMA_HandleTypeDef *hdma)
Abort the DMA Transfer.
void(* MspInitCallback)(struct __SPI_HandleTypeDef *hspi)
__IO uint16_t RxXferCount
HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi)
Pause the DMA Transfer.
__IO HAL_SPI_StateTypeDef State
SPI handle Structure definition.
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_DMAHalfTransmitCplt(DMA_HandleTypeDef *hdma)
DMA SPI half transmit process complete callback.
uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi)
Return the SPI error code.
void(* TxISR)(struct __SPI_HandleTypeDef *hspi)
void(* TxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi)
static void SPI_2linesRxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi)
Manage the CRC 16-bit receive for Transmit and Receive in Interrupt mode.
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 void SPI_DMATransmitCplt(DMA_HandleTypeDef *hdma)
DMA SPI transmit process complete callback.
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
Rx Transfer completed callback.
HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size)
Transmit and Receive an amount of data in non-blocking mode with Interrupt.
__IO uint16_t TxXferCount
static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart)
Handle the check of the RX transaction complete.
HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size)
Transmit an amount of data in non-blocking mode with DMA.
static void SPI_CloseRxTx_ISR(SPI_HandleTypeDef *hspi)
Handle the end of the RXTX transaction.
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 ...
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.
static void SPI_RxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi)
Manage the CRC 16-bit receive in Interrupt context.
void(* RxCpltCallback)(struct __SPI_HandleTypeDef *hspi)
void(* TxCpltCallback)(struct __SPI_HandleTypeDef *hspi)
void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi)
Tx Half Transfer completed callback.
HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi)
De-Initialize the SPI peripheral.
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
Transmit and Receive an amount of data in blocking mode.
static void SPI_DMAHalfTransmitReceiveCplt(DMA_HandleTypeDef *hdma)
DMA SPI half transmit receive process complete 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(* RxISR)(struct __SPI_HandleTypeDef *hspi)
static void SPI_TxISR_8BIT(struct __SPI_HandleTypeDef *hspi)
Handle the data 8-bit transmit in Interrupt mode.
HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi)
Initialize the SPI according to the specified parameters in the SPI_InitTypeDef and initialize the as...
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
static void SPI_CloseTx_ISR(SPI_HandleTypeDef *hspi)
Handle the end of the TX transaction.
void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi)
Rx Half Transfer completed callback.
HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi)
Resume the DMA Transfer.