diff --git a/f4/src/stm32f4xx_hal_i2c.c b/f4/src/stm32f4xx_hal_i2c.c
index de1fce188c537c58278e10c04f294430df5d14f2..9db82b7f723b4203e7f14e5eba3b597000b04f3b 100644
--- a/f4/src/stm32f4xx_hal_i2c.c
+++ b/f4/src/stm32f4xx_hal_i2c.c
@@ -2158,9 +2158,10 @@ HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevA
 {
   /* Prevent unused argument(s) compilation warning */
   UNUSED(DevAddress);
+  uint32_t sr2itflags = READ_REG(hi2c->Instance->SR2);
 
   /* Abort Master transfer during Receive or Transmit process    */
-  if(hi2c->Mode == HAL_I2C_MODE_MASTER)
+  if(hi2c->Mode == HAL_I2C_MODE_MASTER || sr2itflags&0x0001)
   {
     /* Process Locked */
     __HAL_LOCK(hi2c);
@@ -3357,7 +3358,7 @@ void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c)
   uint32_t CurrentMode  = hi2c->Mode;
 
   /* Master or Memory mode selected */
-  if((CurrentMode == HAL_I2C_MODE_MASTER) || (CurrentMode == HAL_I2C_MODE_MEM))
+  if((CurrentMode == HAL_I2C_MODE_MASTER) || (CurrentMode == HAL_I2C_MODE_MEM) || sr2itflags&0x0001)
   {
     /* SB Set ----------------------------------------------------------------*/
     if(((sr1itflags & I2C_FLAG_SB) != RESET) && ((itsources & I2C_IT_EVT) != RESET))