319 #ifdef HAL_I2C_MODULE_ENABLED 327 #define TIMING_CLEAR_MASK (0xF0FFFFFFU) 328 #define I2C_TIMEOUT_ADDR (10000U) 329 #define I2C_TIMEOUT_BUSY (25U) 330 #define I2C_TIMEOUT_DIR (25U) 331 #define I2C_TIMEOUT_RXNE (25U) 332 #define I2C_TIMEOUT_STOPF (25U) 333 #define I2C_TIMEOUT_TC (25U) 334 #define I2C_TIMEOUT_TCR (25U) 335 #define I2C_TIMEOUT_TXIS (25U) 336 #define I2C_TIMEOUT_FLAG (25U) 338 #define MAX_NBYTE_SIZE 255U 339 #define SlaveAddr_SHIFT 7U 340 #define SlaveAddr_MSK 0x06U 343 #define I2C_STATE_MSK ((uint32_t)((uint32_t)((uint32_t)HAL_I2C_STATE_BUSY_TX | (uint32_t)HAL_I2C_STATE_BUSY_RX) & (uint32_t)(~((uint32_t)HAL_I2C_STATE_READY)))) 344 #define I2C_STATE_NONE ((uint32_t)(HAL_I2C_MODE_NONE)) 345 #define I2C_STATE_MASTER_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | (uint32_t)HAL_I2C_MODE_MASTER)) 346 #define I2C_STATE_MASTER_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | (uint32_t)HAL_I2C_MODE_MASTER)) 347 #define I2C_STATE_SLAVE_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | (uint32_t)HAL_I2C_MODE_SLAVE)) 348 #define I2C_STATE_SLAVE_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | (uint32_t)HAL_I2C_MODE_SLAVE)) 349 #define I2C_STATE_MEM_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | (uint32_t)HAL_I2C_MODE_MEM)) 350 #define I2C_STATE_MEM_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | (uint32_t)HAL_I2C_MODE_MEM)) 354 #define I2C_XFER_TX_IT (0x00000001U) 355 #define I2C_XFER_RX_IT (0x00000002U) 356 #define I2C_XFER_LISTEN_IT (0x00000004U) 358 #define I2C_XFER_ERROR_IT (0x00000011U) 359 #define I2C_XFER_CPLT_IT (0x00000012U) 360 #define I2C_XFER_RELOAD_IT (0x00000012U) 363 #define I2C_NO_OPTION_FRAME (0xFFFF0000U) 492 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 521 __HAL_I2C_DISABLE(hi2c);
529 hi2c->
Instance->OAR1 &= ~I2C_OAR1_OA1EN;
545 hi2c->
Instance->CR2 = (I2C_CR2_ADD10);
548 hi2c->
Instance->CR2 |= (I2C_CR2_AUTOEND | I2C_CR2_NACK);
552 hi2c->
Instance->OAR2 &= ~I2C_DUALADDRESS_ENABLE;
562 __HAL_I2C_ENABLE(hi2c);
592 __HAL_I2C_DISABLE(hi2c);
594 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 650 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 674 HAL_StatusTypeDef status =
HAL_OK;
676 if (pCallback == NULL)
679 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
736 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
757 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
767 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
801 HAL_StatusTypeDef status =
HAL_OK;
856 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
877 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
887 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
908 HAL_StatusTypeDef status =
HAL_OK;
910 if (pCallback == NULL)
913 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
927 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
947 HAL_StatusTypeDef status =
HAL_OK;
959 hi2c->
ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK;
1144 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
1147 I2C_RESET_CR2(hi2c);
1259 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
1262 I2C_RESET_CR2(hi2c);
1293 if ((pData == NULL) || (Size == 0U))
1295 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
1314 hi2c->
Instance->CR2 &= ~I2C_CR2_NACK;
1320 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
1325 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR);
1334 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
1339 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR);
1346 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
1356 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
1373 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
1375 if (hi2c->
ErrorCode == HAL_I2C_ERROR_AF)
1388 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
1394 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
1399 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
1430 if ((pData == NULL) || (Size == 0U))
1432 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
1451 hi2c->
Instance->CR2 &= ~I2C_CR2_NACK;
1457 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
1462 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR);
1468 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
1478 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
1481 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET)
1508 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
1513 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
1519 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
1524 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
1556 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET)
1577 xfermode = I2C_RELOAD_MODE;
1582 xfermode = I2C_AUTOEND_MODE;
1625 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET)
1646 xfermode = I2C_RELOAD_MODE;
1651 xfermode = I2C_AUTOEND_MODE;
1698 hi2c->
Instance->CR2 &= ~I2C_CR2_NACK;
1747 hi2c->
Instance->CR2 &= ~I2C_CR2_NACK;
1789 HAL_StatusTypeDef dmaxferstatus;
1793 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET)
1814 xfermode = I2C_RELOAD_MODE;
1819 xfermode = I2C_AUTOEND_MODE;
1824 if (hi2c->
hdmatx != NULL)
1846 hi2c->
ErrorCode |= HAL_I2C_ERROR_DMA_PARAM;
1854 if (dmaxferstatus ==
HAL_OK)
1873 hi2c->
Instance->CR1 |= I2C_CR1_TXDMAEN;
1932 HAL_StatusTypeDef dmaxferstatus;
1936 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET)
1957 xfermode = I2C_RELOAD_MODE;
1962 xfermode = I2C_AUTOEND_MODE;
1967 if (hi2c->
hdmarx != NULL)
1989 hi2c->
ErrorCode |= HAL_I2C_ERROR_DMA_PARAM;
1997 if (dmaxferstatus ==
HAL_OK)
2016 hi2c->
Instance->CR1 |= I2C_CR1_RXDMAEN;
2072 HAL_StatusTypeDef dmaxferstatus;
2076 if ((pData == NULL) || (Size == 0U))
2078 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
2095 if (hi2c->
hdmatx != NULL)
2117 hi2c->
ErrorCode |= HAL_I2C_ERROR_DMA_PARAM;
2125 if (dmaxferstatus ==
HAL_OK)
2128 hi2c->
Instance->CR2 &= ~I2C_CR2_NACK;
2140 hi2c->
Instance->CR1 |= I2C_CR1_TXDMAEN;
2175 HAL_StatusTypeDef dmaxferstatus;
2179 if ((pData == NULL) || (Size == 0U))
2181 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
2198 if (hi2c->
hdmarx != NULL)
2220 hi2c->
ErrorCode |= HAL_I2C_ERROR_DMA_PARAM;
2228 if (dmaxferstatus ==
HAL_OK)
2231 hi2c->
Instance->CR2 &= ~I2C_CR2_NACK;
2243 hi2c->
Instance->CR1 |= I2C_CR1_RXDMAEN;
2289 if ((pData == NULL) || (Size == 0U))
2291 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
2383 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
2386 I2C_RESET_CR2(hi2c);
2424 if ((pData == NULL) || (Size == 0U))
2426 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
2518 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
2521 I2C_RESET_CR2(hi2c);
2558 if ((pData == NULL) || (Size == 0U))
2560 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
2564 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET)
2588 xfermode = I2C_RELOAD_MODE;
2593 xfermode = I2C_AUTOEND_MODE;
2649 if ((pData == NULL) || (Size == 0U))
2651 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
2655 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET)
2679 xfermode = I2C_RELOAD_MODE;
2684 xfermode = I2C_AUTOEND_MODE;
2733 HAL_StatusTypeDef dmaxferstatus;
2740 if ((pData == NULL) || (Size == 0U))
2742 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
2746 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET)
2770 xfermode = I2C_RELOAD_MODE;
2775 xfermode = I2C_AUTOEND_MODE;
2787 if (hi2c->
hdmatx != NULL)
2809 hi2c->
ErrorCode |= HAL_I2C_ERROR_DMA_PARAM;
2817 if (dmaxferstatus ==
HAL_OK)
2836 hi2c->
Instance->CR1 |= I2C_CR1_TXDMAEN;
2877 HAL_StatusTypeDef dmaxferstatus;
2884 if ((pData == NULL) || (Size == 0U))
2886 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
2890 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET)
2914 xfermode = I2C_RELOAD_MODE;
2919 xfermode = I2C_AUTOEND_MODE;
2930 if (hi2c->
hdmarx != NULL)
2952 hi2c->
ErrorCode |= HAL_I2C_ERROR_DMA_PARAM;
2960 if (dmaxferstatus ==
HAL_OK)
2978 hi2c->
Instance->CR1 |= I2C_CR1_RXDMAEN;
3018 __IO uint32_t I2C_Trials = 0UL;
3025 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET)
3045 tmp1 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF);
3046 tmp2 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF);
3048 while ((tmp1 == RESET) && (tmp2 == RESET))
3050 if (Timeout != HAL_MAX_DELAY)
3052 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
3058 hi2c->
ErrorCode |= HAL_I2C_ERROR_TIMEOUT;
3067 tmp1 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF);
3068 tmp2 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF);
3072 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == RESET)
3081 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
3100 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
3103 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
3107 if (I2C_Trials == Trials)
3110 hi2c->
Instance->CR2 |= I2C_CR2_STOP;
3119 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
3125 while (I2C_Trials < Trials);
3131 hi2c->
ErrorCode |= HAL_I2C_ERROR_TIMEOUT;
3159 uint32_t xferrequest = I2C_GENERATE_START_WRITE;
3162 assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
3183 xfermode = I2C_RELOAD_MODE;
3193 if ((hi2c->
PreviousState == I2C_STATE_MASTER_BUSY_TX) && (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0))
3195 xferrequest = I2C_NO_STARTSTOP;
3243 uint32_t xferrequest = I2C_GENERATE_START_WRITE;
3244 HAL_StatusTypeDef dmaxferstatus;
3247 assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
3268 xfermode = I2C_RELOAD_MODE;
3278 if ((hi2c->
PreviousState == I2C_STATE_MASTER_BUSY_TX) && (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0))
3280 xferrequest = I2C_NO_STARTSTOP;
3296 if (hi2c->
hdmatx != NULL)
3318 hi2c->
ErrorCode |= HAL_I2C_ERROR_DMA_PARAM;
3326 if (dmaxferstatus ==
HAL_OK)
3344 hi2c->
Instance->CR1 |= I2C_CR1_TXDMAEN;
3405 uint32_t xferrequest = I2C_GENERATE_START_READ;
3408 assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
3429 xfermode = I2C_RELOAD_MODE;
3439 if ((hi2c->
PreviousState == I2C_STATE_MASTER_BUSY_RX) && (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0))
3441 xferrequest = I2C_NO_STARTSTOP;
3489 uint32_t xferrequest = I2C_GENERATE_START_READ;
3490 HAL_StatusTypeDef dmaxferstatus;
3493 assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
3514 xfermode = I2C_RELOAD_MODE;
3524 if ((hi2c->
PreviousState == I2C_STATE_MASTER_BUSY_RX) && (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0))
3526 xferrequest = I2C_NO_STARTSTOP;
3542 if (hi2c->
hdmarx != NULL)
3564 hi2c->
ErrorCode |= HAL_I2C_ERROR_DMA_PARAM;
3572 if (dmaxferstatus ==
HAL_OK)
3590 hi2c->
Instance->CR1 |= I2C_CR1_RXDMAEN;
3649 assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
3653 if ((pData == NULL) || (Size == 0U))
3655 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
3673 if ((hi2c->
Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN)
3675 hi2c->
Instance->CR1 &= ~I2C_CR1_RXDMAEN;
3677 if (hi2c->
hdmarx != NULL)
3698 hi2c->
Instance->CR2 &= ~I2C_CR2_NACK;
3707 if (I2C_GET_DIR(hi2c) == I2C_DIRECTION_RECEIVE)
3711 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR);
3743 HAL_StatusTypeDef dmaxferstatus;
3746 assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
3750 if ((pData == NULL) || (Size == 0U))
3752 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
3769 if ((hi2c->
Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN)
3772 if (hi2c->
hdmarx != NULL)
3774 hi2c->
Instance->CR1 &= ~I2C_CR1_RXDMAEN;
3791 if ((hi2c->
Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN)
3793 hi2c->
Instance->CR1 &= ~I2C_CR1_TXDMAEN;
3796 if (hi2c->
hdmatx != NULL)
3821 hi2c->
Instance->CR2 &= ~I2C_CR2_NACK;
3830 if (hi2c->
hdmatx != NULL)
3852 hi2c->
ErrorCode |= HAL_I2C_ERROR_DMA_PARAM;
3860 if (dmaxferstatus ==
HAL_OK)
3883 if (I2C_GET_DIR(hi2c) == I2C_DIRECTION_RECEIVE)
3887 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR);
3900 hi2c->
Instance->CR1 |= I2C_CR1_TXDMAEN;
3923 assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
3927 if ((pData == NULL) || (Size == 0U))
3929 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
3946 if ((hi2c->
Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN)
3948 hi2c->
Instance->CR1 &= ~I2C_CR1_TXDMAEN;
3951 if (hi2c->
hdmatx != NULL)
3972 hi2c->
Instance->CR2 &= ~I2C_CR2_NACK;
3981 if (I2C_GET_DIR(hi2c) == I2C_DIRECTION_TRANSMIT)
3985 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR);
4017 HAL_StatusTypeDef dmaxferstatus;
4020 assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
4024 if ((pData == NULL) || (Size == 0U))
4026 hi2c->
ErrorCode = HAL_I2C_ERROR_INVALID_PARAM;
4043 if ((hi2c->
Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN)
4046 if (hi2c->
hdmatx != NULL)
4048 hi2c->
Instance->CR1 &= ~I2C_CR1_TXDMAEN;
4065 if ((hi2c->
Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN)
4067 hi2c->
Instance->CR1 &= ~I2C_CR1_RXDMAEN;
4070 if (hi2c->
hdmarx != NULL)
4095 hi2c->
Instance->CR2 &= ~I2C_CR2_NACK;
4104 if (hi2c->
hdmarx != NULL)
4126 hi2c->
ErrorCode |= HAL_I2C_ERROR_DMA_PARAM;
4134 if (dmaxferstatus ==
HAL_OK)
4157 if (I2C_GET_DIR(hi2c) == I2C_DIRECTION_TRANSMIT)
4161 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR);
4174 hi2c->
Instance->CR1 |= I2C_CR1_RXDMAEN;
4222 tmp = (uint32_t)(hi2c->
State) & I2C_STATE_MSK;
4300 uint32_t itflags = READ_REG(hi2c->
Instance->ISR);
4301 uint32_t itsources = READ_REG(hi2c->
Instance->CR1);
4306 hi2c->
XferISR(hi2c, itflags, itsources);
4318 uint32_t itflags = READ_REG(hi2c->
Instance->ISR);
4319 uint32_t itsources = READ_REG(hi2c->
Instance->CR1);
4323 if ((I2C_CHECK_FLAG(itflags, I2C_FLAG_BERR) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_ERRI) != RESET))
4328 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_BERR);
4332 if ((I2C_CHECK_FLAG(itflags, I2C_FLAG_OVR) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_ERRI) != RESET))
4337 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_OVR);
4341 if ((I2C_CHECK_FLAG(itflags, I2C_FLAG_ARLO) != RESET) && (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_ERRI) != RESET))
4346 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ARLO);
4353 if ((tmperror & (HAL_I2C_ERROR_BERR | HAL_I2C_ERROR_OVR | HAL_I2C_ERROR_ARLO)) != HAL_I2C_ERROR_NONE)
4434 UNUSED(TransferDirection);
4435 UNUSED(AddrMatchCode);
4597 uint16_t devaddress;
4598 uint32_t tmpITFlags = ITFlags;
4603 if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
4606 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
4616 else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_RXNE) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_RXI) != RESET))
4619 tmpITFlags &= ~I2C_FLAG_RXNE;
4630 else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TXIS) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TXI) != RESET))
4641 else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TCR) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET))
4645 devaddress = (uint16_t)(hi2c->
Instance->CR2 & I2C_CR2_SADD);
4668 if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE)
4681 else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TC) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET))
4685 if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE)
4691 hi2c->
Instance->CR2 |= I2C_CR2_STOP;
4712 if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
4735 uint32_t tmpITFlags = ITFlags;
4740 if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
4756 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
4768 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
4775 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
4780 if ((tmpoptions == I2C_FIRST_FRAME) || (tmpoptions == I2C_NEXT_FRAME))
4787 else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_RXNE) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_RXI) != RESET))
4792 tmpITFlags &= ~I2C_FLAG_RXNE;
4805 (tmpoptions != I2C_NO_OPTION_FRAME))
4811 else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_ADDR) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_ADDRI) != RESET))
4815 else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TXIS) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TXI) != RESET))
4834 if ((tmpoptions == I2C_NEXT_FRAME) || (tmpoptions == I2C_FIRST_FRAME))
4848 if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
4870 uint16_t devaddress;
4876 if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
4879 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
4892 else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_TCR) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET))
4895 __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_TCI);
4900 devaddress = (uint16_t)(hi2c->
Instance->CR2 & I2C_CR2_SADD);
4906 xfermode = I2C_RELOAD_MODE;
4917 xfermode = I2C_AUTOEND_MODE;
4930 hi2c->
Instance->CR1 |= I2C_CR1_RXDMAEN;
4934 hi2c->
Instance->CR1 |= I2C_CR1_TXDMAEN;
4940 if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE)
4953 else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_TC) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET))
4957 if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE)
4963 hi2c->
Instance->CR2 |= I2C_CR2_STOP;
4979 else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
5006 uint32_t treatdmanack = 0U;
5011 if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
5017 if ((I2C_CHECK_IT_SOURCE(ITSources, I2C_CR1_TXDMAEN) != RESET) ||
5018 (I2C_CHECK_IT_SOURCE(ITSources, I2C_CR1_RXDMAEN) != RESET))
5021 if (hi2c->
hdmarx != NULL)
5023 if (I2C_CHECK_IT_SOURCE(ITSources, I2C_CR1_RXDMAEN) != RESET)
5025 if (__HAL_DMA_GET_COUNTER(hi2c->
hdmarx) == 0U)
5033 if (hi2c->
hdmatx != NULL)
5035 if (I2C_CHECK_IT_SOURCE(ITSources, I2C_CR1_TXDMAEN) != RESET)
5037 if (__HAL_DMA_GET_COUNTER(hi2c->
hdmatx) == 0U)
5044 if (treatdmanack == 1U)
5054 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
5066 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
5073 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
5078 if ((tmpoptions == I2C_FIRST_FRAME) || (tmpoptions == I2C_NEXT_FRAME))
5088 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
5091 else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_ADDR) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_ADDRI) != RESET))
5095 else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
5125 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_RELOAD_MODE, I2C_GENERATE_START_WRITE);
5134 if (MemAddSize == I2C_MEMADD_SIZE_8BIT)
5137 hi2c->
Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress);
5143 hi2c->
Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress);
5152 hi2c->
Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress);
5178 I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_SOFTEND_MODE, I2C_GENERATE_START_WRITE);
5187 if (MemAddSize == I2C_MEMADD_SIZE_8BIT)
5190 hi2c->
Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress);
5196 hi2c->
Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress);
5205 hi2c->
Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress);
5225 uint8_t transferdirection;
5226 uint16_t slaveaddrcode;
5227 uint16_t ownadd1code;
5228 uint16_t ownadd2code;
5236 transferdirection = I2C_GET_DIR(hi2c);
5237 slaveaddrcode = I2C_GET_ADDR_MATCH(hi2c);
5238 ownadd1code = I2C_GET_OWN_ADDRESS1(hi2c);
5239 ownadd2code = I2C_GET_OWN_ADDRESS2(hi2c);
5244 if ((slaveaddrcode & SlaveAddr_MSK) == ((ownadd1code >> SlaveAddr_SHIFT) & SlaveAddr_MSK))
5246 slaveaddrcode = ownadd1code;
5254 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR);
5260 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5261 hi2c->
AddrCallback(hi2c, transferdirection, slaveaddrcode);
5269 slaveaddrcode = ownadd2code;
5278 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5279 hi2c->
AddrCallback(hi2c, transferdirection, slaveaddrcode);
5295 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5296 hi2c->
AddrCallback(hi2c, transferdirection, slaveaddrcode);
5306 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR);
5338 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5358 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5389 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5409 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5432 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
5435 I2C_RESET_CR2(hi2c);
5442 if (I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET)
5445 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
5479 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5493 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5513 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5527 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5548 uint32_t tmpcr1value = READ_REG(hi2c->
Instance->CR1);
5549 uint32_t tmpITFlags = ITFlags;
5552 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
5555 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_TX_IT | I2C_XFER_RX_IT);
5558 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
5561 I2C_RESET_CR2(hi2c);
5567 if (I2C_CHECK_IT_SOURCE(tmpcr1value, I2C_CR1_TXDMAEN) != RESET)
5569 if (hi2c->
hdmatx != NULL)
5574 else if (I2C_CHECK_IT_SOURCE(tmpcr1value, I2C_CR1_RXDMAEN) != RESET)
5576 if (hi2c->
hdmarx != NULL)
5587 if (I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_RXNE) != RESET)
5590 tmpITFlags &= ~I2C_FLAG_RXNE;
5616 if (hi2c->
ErrorCode != HAL_I2C_ERROR_NONE)
5628 else if (hi2c->
XferOptions != I2C_NO_OPTION_FRAME)
5640 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5655 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5669 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5693 if (I2C_CHECK_FLAG(ITFlags, I2C_FLAG_RXNE) != RESET)
5712 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT | I2C_XFER_TX_IT);
5715 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
5721 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5762 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT | I2C_XFER_TX_IT);
5776 if ((hi2c->
Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN)
5778 hi2c->
Instance->CR1 &= ~I2C_CR1_TXDMAEN;
5780 if (hi2c->
hdmatx != NULL)
5798 else if ((hi2c->
Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN)
5800 hi2c->
Instance->CR1 &= ~I2C_CR1_RXDMAEN;
5802 if (hi2c->
hdmarx != NULL)
5827 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5839 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 5856 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXIS) != RESET)
5862 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXE) == RESET)
5864 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_TXE);
5878 hi2c->
Instance->CR1 &= ~I2C_CR1_TXDMAEN;
5926 if ((tmpoptions == I2C_NEXT_FRAME) || (tmpoptions == I2C_FIRST_FRAME))
5929 hi2c->
Instance->CR1 &= ~I2C_CR1_TXDMAEN;
5953 hi2c->
Instance->CR1 &= ~I2C_CR1_RXDMAEN;
6001 if ((__HAL_DMA_GET_COUNTER(hi2c->
hdmarx) == 0U) && \
6002 (tmpoptions != I2C_NO_OPTION_FRAME))
6005 hi2c->
Instance->CR1 &= ~I2C_CR1_RXDMAEN;
6028 hi2c->
Instance->CR2 |= I2C_CR2_NACK;
6054 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 6063 #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) 6083 while (__HAL_I2C_GET_FLAG(hi2c, Flag) == Status)
6086 if (Timeout != HAL_MAX_DELAY)
6088 if (((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
6090 hi2c->
ErrorCode |= HAL_I2C_ERROR_TIMEOUT;
6113 while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXIS) == RESET)
6122 if (Timeout != HAL_MAX_DELAY)
6124 if (((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
6126 hi2c->
ErrorCode |= HAL_I2C_ERROR_TIMEOUT;
6150 while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET)
6159 if (((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
6161 hi2c->
ErrorCode |= HAL_I2C_ERROR_TIMEOUT;
6184 while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == RESET)
6193 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == SET)
6197 if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) && (hi2c->
XferSize > 0U))
6206 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
6209 I2C_RESET_CR2(hi2c);
6223 if (((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
6225 hi2c->
ErrorCode |= HAL_I2C_ERROR_TIMEOUT;
6247 if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == SET)
6251 while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET)
6254 if (Timeout != HAL_MAX_DELAY)
6256 if (((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
6258 hi2c->
ErrorCode |= HAL_I2C_ERROR_TIMEOUT;
6271 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
6274 __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
6280 I2C_RESET_CR2(hi2c);
6321 MODIFY_REG(hi2c->
Instance->CR2, ((I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | (I2C_CR2_RD_WRN & (uint32_t)(Request >> (31U - I2C_CR2_RD_WRN_Pos))) | I2C_CR2_START | I2C_CR2_STOP)), \
6322 (uint32_t)(((uint32_t)DevAddress & I2C_CR2_SADD) | (((uint32_t)Size << I2C_CR2_NBYTES_Pos) & I2C_CR2_NBYTES) | (uint32_t)Mode | (uint32_t)Request));
6334 uint32_t tmpisr = 0U;
6339 if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT)
6342 tmpisr |= I2C_IT_ADDRI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI;
6345 if ((InterruptRequest & I2C_XFER_ERROR_IT) == I2C_XFER_ERROR_IT)
6348 tmpisr |= I2C_IT_ERRI | I2C_IT_NACKI;
6351 if ((InterruptRequest & I2C_XFER_CPLT_IT) == I2C_XFER_CPLT_IT)
6354 tmpisr |= I2C_IT_STOPI;
6357 if ((InterruptRequest & I2C_XFER_RELOAD_IT) == I2C_XFER_RELOAD_IT)
6360 tmpisr |= I2C_IT_TCI;
6365 if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT)
6368 tmpisr |= I2C_IT_ADDRI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI;
6371 if ((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT)
6374 tmpisr |= I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_TXI;
6377 if ((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT)
6380 tmpisr |= I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_RXI;
6383 if ((InterruptRequest & I2C_XFER_CPLT_IT) == I2C_XFER_CPLT_IT)
6386 tmpisr |= I2C_IT_STOPI;
6393 __HAL_I2C_ENABLE_IT(hi2c, tmpisr);
6405 uint32_t tmpisr = 0U;
6407 if ((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT)
6410 tmpisr |= I2C_IT_TCI | I2C_IT_TXI;
6415 tmpisr |= I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI;
6419 if ((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT)
6422 tmpisr |= I2C_IT_TCI | I2C_IT_RXI;
6427 tmpisr |= I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI;
6431 if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT)
6434 tmpisr |= I2C_IT_ADDRI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI;
6437 if ((InterruptRequest & I2C_XFER_ERROR_IT) == I2C_XFER_ERROR_IT)
6440 tmpisr |= I2C_IT_ERRI | I2C_IT_NACKI;
6443 if ((InterruptRequest & I2C_XFER_CPLT_IT) == I2C_XFER_CPLT_IT)
6446 tmpisr |= I2C_IT_STOPI;
6449 if ((InterruptRequest & I2C_XFER_RELOAD_IT) == I2C_XFER_RELOAD_IT)
6452 tmpisr |= I2C_IT_TCI;
6458 __HAL_I2C_DISABLE_IT(hi2c, tmpisr);
6479 else if (hi2c->
XferOptions == I2C_OTHER_AND_LAST_FRAME)
DMA_HandleTypeDef * hdmarx
static HAL_StatusTypeDef I2C_WaitOnTXISFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart)
This function handles I2C Communication Timeout for specific usage of TXIS flag.
HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress)
Abort a master I2C IT or DMA process communication with Interrupt.
static void I2C_DMASlaveTransmitCplt(DMA_HandleTypeDef *hdma)
DMA I2C slave transmit process complete callback.
void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c)
Slave Rx Transfer completed callback.
void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c)
I2C abort callback.
void(* SlaveRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c)
void(* XferAbortCallback)(struct __DMA_HandleTypeDef *hdma)
static void I2C_ITError(I2C_HandleTypeDef *hi2c, uint32_t ErrorCode)
I2C interrupts error process.
HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size)
Receive in slave mode an amount of data in non-blocking mode with Interrupt.
HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential receive in master I2C mode an amount of data in non-blocking mode with Interrupt...
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c)
Master Rx Transfer completed callback.
static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources)
Interrupt Sub-Routine which handle the Interrupt Flags Slave Mode with DMA.
static void I2C_Enable_IRQ(I2C_HandleTypeDef *hi2c, uint16_t InterruptRequest)
Manage the enabling of Interrupts.
void(* MspInitCallback)(struct __I2C_HandleTypeDef *hi2c)
DMA handle Structure definition.
static void I2C_ITSlaveSeqCplt(I2C_HandleTypeDef *hi2c)
I2C Slave sequential complete process.
void(* ErrorCallback)(struct __I2C_HandleTypeDef *hi2c)
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential receive in slave/device I2C mode an amount of data in non-blocking mode with DMA...
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Write an amount of data in blocking mode to a specific memory address.
HAL_I2C_ModeTypeDef HAL_I2C_GetMode(I2C_HandleTypeDef *hi2c)
Returns the I2C Master, Slave, Memory or no mode.
if(lpuartdiv >=LPUART_BRR_MIN_VALUE)
void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c)
Slave Tx Transfer completed callback.
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c)
I2C error callback.
static void I2C_ITSlaveCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags)
I2C Slave complete process.
static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources)
Interrupt Sub-Routine which handle the Interrupt Flags Slave Mode with Interrupt. ...
HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size)
Transmit in slave mode an amount of data in non-blocking mode with DMA.
This file contains all the functions prototypes for the HAL module driver.
HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)
Transmit in master mode an amount of data in non-blocking mode with Interrupt.
HAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c)
Return the I2C handle state.
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential receive in slave/device I2C mode an amount of data in non-blocking mode with Interrupt...
__IO uint32_t AddrEventCount
static void I2C_ITListenCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags)
I2C Listen complete process.
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Transmits in master mode an amount of data in blocking mode.
HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size)
Transmit in slave mode an amount of data in non-blocking mode with Interrupt.
static void I2C_DMAMasterReceiveCplt(DMA_HandleTypeDef *hdma)
DMA I2C master receive process complete callback.
HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential transmit in master I2C mode an amount of data in non-blocking mode with DMA...
HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
Reads an amount of data in non-blocking mode with DMA from a specific memory address.
void(* pI2C_CallbackTypeDef)(I2C_HandleTypeDef *hi2c)
HAL I2C Callback pointer definition.
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer in Interrupt mode.
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)
static void I2C_DMAError(DMA_HandleTypeDef *hdma)
DMA I2C communication error callback.
void(* ListenCpltCallback)(struct __I2C_HandleTypeDef *hi2c)
void(* MemTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c)
void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c)
Listen Complete callback.
void(* MemRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c)
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.
static HAL_StatusTypeDef I2C_WaitOnRXNEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart)
This function handles I2C Communication Timeout for specific usage of RXNE flag.
HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential receive in master I2C mode an amount of data in non-blocking mode with DMA...
HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c)
Enable the Address listen mode with Interrupt.
HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout)
Checks if target device is ready for communication.
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c)
Memory Tx Transfer completed callback.
static void I2C_Flush_TXDR(I2C_HandleTypeDef *hi2c)
I2C Tx data register flush process.
void(* SlaveTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c)
static HAL_StatusTypeDef I2C_WaitOnSTOPFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart)
This function handles I2C Communication Timeout for specific usage of STOP flag.
static void I2C_ITMasterSeqCplt(I2C_HandleTypeDef *hi2c)
I2C Master sequential complete process.
static HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, uint32_t Tickstart)
Master sends target device address followed by internal memory address for write request.
static HAL_StatusTypeDef I2C_Master_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources)
Interrupt Sub-Routine which handle the Interrupt Flags Master Mode with Interrupt.
uint32_t OwnAddress2Masks
HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c)
Disable the Address listen mode with Interrupt.
void(* MasterTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c)
void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c)
This function handles I2C error interrupt request.
void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c)
This function handles I2C event interrupt request.
void(* pI2C_AddrCallbackTypeDef)(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode)
static void I2C_DMAMasterTransmitCplt(DMA_HandleTypeDef *hdma)
DMA I2C master transmit process complete callback.
void(* AbortCpltCallback)(struct __I2C_HandleTypeDef *hi2c)
__IO HAL_I2C_ModeTypeDef Mode
HAL_StatusTypeDef HAL_I2C_UnRegisterAddrCallback(I2C_HandleTypeDef *hi2c)
UnRegister the Slave Address Match I2C Callback Info Ready I2C Callback is redirected to the weak HAL...
HAL_StatusTypeDef HAL_I2C_RegisterAddrCallback(I2C_HandleTypeDef *hi2c, pI2C_AddrCallbackTypeDef pCallback)
Register the Slave Address Match I2C Callback To be used instead of the weak HAL_I2C_AddrCallback() p...
HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Transmits in slave mode an amount of data in blocking mode.
__IO uint32_t PreviousState
DMA_HandleTypeDef * hdmatx
static void I2C_Disable_IRQ(I2C_HandleTypeDef *hi2c, uint16_t InterruptRequest)
Manage the disabling of Interrupts.
static void I2C_TransferConfig(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t Size, uint32_t Mode, uint32_t Request)
Handles I2Cx communication when starting transfer or during transfer (TC or TCR flag are set)...
static void I2C_ITMasterCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags)
I2C Master complete process.
void(* MspDeInitCallback)(struct __I2C_HandleTypeDef *hi2c)
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential transmit in slave/device I2C mode an amount of data in non-blocking mode with Interrupt...
static void I2C_ITAddrCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags)
I2C Address complete process callback.
HAL_StatusTypeDef(* XferISR)(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources)
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential transmit in slave/device I2C mode an amount of data in non-blocking mode with DMA...
HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size)
Receive in slave mode an amount of data in non-blocking mode with DMA.
HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
Write an amount of data in non-blocking mode with Interrupt to a specific memory address.
HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Receive in slave mode an amount of data in blocking mode.
HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)
Receive in master mode an amount of data in non-blocking mode with Interrupt.
HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c)
DeInitialize the I2C peripheral.
__IO HAL_I2C_StateTypeDef State
HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Read an amount of data in blocking mode from a specific memory address.
void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c)
DeInitialize the I2C MSP.
__IO uint32_t XferOptions
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
Write an amount of data in non-blocking mode with DMA to a specific memory address.
HAL_StatusTypeDef HAL_I2C_UnRegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID)
Unregister an I2C Callback I2C callback is redirected to the weak predefined callback.
static HAL_StatusTypeDef I2C_Master_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources)
Interrupt Sub-Routine which handle the Interrupt Flags Master Mode with DMA.
void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c)
Initialize the I2C MSP.
uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c)
Return the I2C error code.
static void I2C_DMASlaveReceiveCplt(DMA_HandleTypeDef *hdma)
DMA I2C slave receive process complete callback.
void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode)
Slave Address Match callback.
static void I2C_ConvertOtherXferOptions(I2C_HandleTypeDef *hi2c)
Convert I2Cx OTHER_xxx XferOptions to functionnal XferOptions.
HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
Read an amount of data in non-blocking mode with Interrupt from a specific memory address...
static HAL_StatusTypeDef I2C_IsAcknowledgeFailed(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart)
This function handles Acknowledge failed detection during an I2C Communication.
HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential transmit in master I2C mode an amount of data in non-blocking mode with Interrupt...
void(* AddrCallback)(struct __I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode)
static HAL_StatusTypeDef I2C_RequestMemoryRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, uint32_t Tickstart)
Master sends target device address followed by internal memory address for read request.
static void I2C_DMAAbort(DMA_HandleTypeDef *hdma)
DMA I2C communication abort callback (To be called at end of DMA Abort procedure).
HAL_StatusTypeDef HAL_I2C_RegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID, pI2C_CallbackTypeDef pCallback)
Register a User I2C Callback To be used instead of the weak predefined callback.
HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)
Transmit in master mode an amount of data in non-blocking mode with DMA.
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c)
Master Tx Transfer completed callback.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c)
Memory Rx Transfer completed callback.
HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Receives in master mode an amount of data in blocking mode.
HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c)
Initializes the I2C according to the specified parameters in the I2C_InitTypeDef and initialize the a...
HAL_I2C_CallbackIDTypeDef
HAL I2C Callback ID enumeration definition.
static HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, FlagStatus Status, uint32_t Timeout, uint32_t Tickstart)
This function handles I2C Communication Timeout.
HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)
Receive in master mode an amount of data in non-blocking mode with DMA.
void(* MasterRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c)