@@ -2156,7 +2156,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t D
21562156 /* possible to enable all of these */
21572157 /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI |
21582158 I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */
2159- I2C_Enable_IRQ (hi2c , I2C_XFER_TX_IT );
2159+ I2C_Enable_IRQ (hi2c , I2C_XFER_RX_IT );
21602160 }
21612161
21622162 return HAL_OK ;
@@ -2845,7 +2845,7 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddre
28452845 /* possible to enable all of these */
28462846 /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI |
28472847 I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */
2848- I2C_Enable_IRQ (hi2c , (I2C_XFER_TX_IT | I2C_XFER_RX_IT ));
2848+ I2C_Enable_IRQ (hi2c , (I2C_XFER_TX_IT ));
28492849
28502850 return HAL_OK ;
28512851 }
@@ -3790,7 +3790,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16
37903790 /* possible to enable all of these */
37913791 /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI |
37923792 I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */
3793- I2C_Enable_IRQ (hi2c , I2C_XFER_TX_IT );
3793+ I2C_Enable_IRQ (hi2c , I2C_XFER_RX_IT );
37943794 }
37953795
37963796 return HAL_OK ;
@@ -5030,7 +5030,13 @@ static HAL_StatusTypeDef I2C_Mem_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32
50305030 else if ((I2C_CHECK_FLAG (tmpITFlags , I2C_FLAG_TC ) != RESET ) && \
50315031 (I2C_CHECK_IT_SOURCE (ITSources , I2C_IT_TCI ) != RESET ))
50325032 {
5033- if (hi2c -> State == HAL_I2C_STATE_BUSY_RX )
5033+ /* Disable Interrupt related to address step */
5034+ I2C_Disable_IRQ (hi2c , I2C_XFER_TX_IT );
5035+
5036+ /* Enable ERR, TC, STOP, NACK and RXI interrupts */
5037+ I2C_Enable_IRQ (hi2c , I2C_XFER_RX_IT );
5038+
5039+ if (hi2c -> State == HAL_I2C_STATE_BUSY_RX )
50345040 {
50355041 direction = I2C_GENERATE_START_READ ;
50365042 }
@@ -5396,6 +5402,9 @@ static HAL_StatusTypeDef I2C_Mem_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint3
53965402 else if ((I2C_CHECK_FLAG (ITFlags , I2C_FLAG_TCR ) != RESET ) && \
53975403 (I2C_CHECK_IT_SOURCE (ITSources , I2C_IT_TCI ) != RESET ))
53985404 {
5405+ /* Disable Interrupt related to address step */
5406+ I2C_Disable_IRQ (hi2c , I2C_XFER_TX_IT );
5407+
53995408 /* Enable only Error interrupt */
54005409 I2C_Enable_IRQ (hi2c , I2C_XFER_ERROR_IT );
54015410
@@ -5438,6 +5447,12 @@ static HAL_StatusTypeDef I2C_Mem_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint3
54385447 else if ((I2C_CHECK_FLAG (ITFlags , I2C_FLAG_TC ) != RESET ) && \
54395448 (I2C_CHECK_IT_SOURCE (ITSources , I2C_IT_TCI ) != RESET ))
54405449 {
5450+ /* Disable Interrupt related to address step */
5451+ I2C_Disable_IRQ (hi2c , I2C_XFER_TX_IT );
5452+
5453+ /* Enable only Error and NACK interrupt for data transfer */
5454+ I2C_Enable_IRQ (hi2c , I2C_XFER_ERROR_IT );
5455+
54415456 if (hi2c -> State == HAL_I2C_STATE_BUSY_RX )
54425457 {
54435458 direction = I2C_GENERATE_START_READ ;
@@ -6122,7 +6137,8 @@ static void I2C_ITSlaveCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags)
61226137 __HAL_I2C_CLEAR_FLAG (hi2c , I2C_FLAG_STOPF );
61236138
61246139 /* Disable Interrupts and Store Previous state */
6125- if ((tmpstate == HAL_I2C_STATE_BUSY_TX ) || (tmpstate == HAL_I2C_STATE_BUSY_TX_LISTEN ))
6140+ if ((tmpstate == HAL_I2C_STATE_BUSY_TX ) || (tmpstate == HAL_I2C_STATE_BUSY_TX_LISTEN ) ||
6141+ (tmpstate == HAL_I2C_STATE_LISTEN ))
61266142 {
61276143 I2C_Disable_IRQ (hi2c , I2C_XFER_LISTEN_IT | I2C_XFER_TX_IT );
61286144 hi2c -> PreviousState = I2C_STATE_SLAVE_BUSY_TX ;
0 commit comments