@@ -723,16 +723,19 @@ i2c_status_e i2c_master_write(i2c_t *obj, uint8_t dev_address,
723
723
while ((HAL_I2C_GetState (& (obj -> handle )) != HAL_I2C_STATE_READY )
724
724
&& (ret == I2C_OK )) {
725
725
delta = (HAL_GetTick () - tickstart );
726
- if (delta > I2C_TIMEOUT_TICK ) {
726
+ uint32_t err = HAL_I2C_GetError (& (obj -> handle ));
727
+ if ((delta > I2C_TIMEOUT_TICK )
728
+ || ((err & HAL_I2C_ERROR_TIMEOUT ) == HAL_I2C_ERROR_TIMEOUT )) {
727
729
ret = I2C_TIMEOUT ;
728
- } else if (HAL_I2C_GetError ( & ( obj -> handle )) != HAL_I2C_ERROR_NONE ) {
730
+ } else if (err != HAL_I2C_ERROR_NONE ) {
729
731
ret = I2C_ERROR ;
730
732
}
731
733
}
732
734
}
733
735
/* When Acknowledge failure occurs (Slave don't acknowledge it's address)
734
736
Master restarts communication */
735
- } while (HAL_I2C_GetError (& (obj -> handle )) == HAL_I2C_ERROR_AF && delta < I2C_TIMEOUT_TICK );
737
+ } while (((HAL_I2C_GetError (& (obj -> handle )) & HAL_I2C_ERROR_AF ) == HAL_I2C_ERROR_AF )
738
+ && (delta < I2C_TIMEOUT_TICK ));
736
739
737
740
return ret ;
738
741
}
@@ -784,16 +787,19 @@ i2c_status_e i2c_master_read(i2c_t *obj, uint8_t dev_address, uint8_t *data, uin
784
787
while ((HAL_I2C_GetState (& (obj -> handle )) != HAL_I2C_STATE_READY )
785
788
&& (ret == I2C_OK )) {
786
789
delta = (HAL_GetTick () - tickstart );
787
- if (delta > I2C_TIMEOUT_TICK ) {
790
+ uint32_t err = HAL_I2C_GetError (& (obj -> handle ));
791
+ if ((delta > I2C_TIMEOUT_TICK )
792
+ || ((err & HAL_I2C_ERROR_TIMEOUT ) == HAL_I2C_ERROR_TIMEOUT )) {
788
793
ret = I2C_TIMEOUT ;
789
- } else if (HAL_I2C_GetError ( & ( obj -> handle )) != HAL_I2C_ERROR_NONE ) {
794
+ } else if (err != HAL_I2C_ERROR_NONE ) {
790
795
ret = I2C_ERROR ;
791
796
}
792
797
}
793
798
}
794
799
/* When Acknowledge failure occurs (Slave don't acknowledge it's address)
795
800
Master restarts communication */
796
- } while (HAL_I2C_GetError (& (obj -> handle )) == HAL_I2C_ERROR_AF && delta < I2C_TIMEOUT_TICK );
801
+ } while (((HAL_I2C_GetError (& (obj -> handle )) & HAL_I2C_ERROR_AF ) == HAL_I2C_ERROR_AF )
802
+ && (delta < I2C_TIMEOUT_TICK ));
797
803
798
804
return ret ;
799
805
}
0 commit comments