diff --git a/cores/arduino/stm32/twi.c b/cores/arduino/stm32/twi.c index 01c6b3912d..9bfa4172b0 100644 --- a/cores/arduino/stm32/twi.c +++ b/cores/arduino/stm32/twi.c @@ -723,16 +723,19 @@ i2c_status_e i2c_master_write(i2c_t *obj, uint8_t dev_address, while ((HAL_I2C_GetState(&(obj->handle)) != HAL_I2C_STATE_READY) && (ret == I2C_OK)) { delta = (HAL_GetTick() - tickstart); - if (delta > I2C_TIMEOUT_TICK) { + uint32_t err = HAL_I2C_GetError(&(obj->handle)); + if ((delta > I2C_TIMEOUT_TICK) + || ((err & HAL_I2C_ERROR_TIMEOUT) == HAL_I2C_ERROR_TIMEOUT)) { ret = I2C_TIMEOUT; - } else if (HAL_I2C_GetError(&(obj->handle)) != HAL_I2C_ERROR_NONE) { + } else if (err != HAL_I2C_ERROR_NONE) { ret = I2C_ERROR; } } } /* When Acknowledge failure occurs (Slave don't acknowledge it's address) Master restarts communication */ - } while (HAL_I2C_GetError(&(obj->handle)) == HAL_I2C_ERROR_AF && delta < I2C_TIMEOUT_TICK); + } while (((HAL_I2C_GetError(&(obj->handle)) & HAL_I2C_ERROR_AF) == HAL_I2C_ERROR_AF) + && (delta < I2C_TIMEOUT_TICK)); return ret; } @@ -784,16 +787,19 @@ i2c_status_e i2c_master_read(i2c_t *obj, uint8_t dev_address, uint8_t *data, uin while ((HAL_I2C_GetState(&(obj->handle)) != HAL_I2C_STATE_READY) && (ret == I2C_OK)) { delta = (HAL_GetTick() - tickstart); - if (delta > I2C_TIMEOUT_TICK) { + uint32_t err = HAL_I2C_GetError(&(obj->handle)); + if ((delta > I2C_TIMEOUT_TICK) + || ((err & HAL_I2C_ERROR_TIMEOUT) == HAL_I2C_ERROR_TIMEOUT)) { ret = I2C_TIMEOUT; - } else if (HAL_I2C_GetError(&(obj->handle)) != HAL_I2C_ERROR_NONE) { + } else if (err != HAL_I2C_ERROR_NONE) { ret = I2C_ERROR; } } } /* When Acknowledge failure occurs (Slave don't acknowledge it's address) Master restarts communication */ - } while (HAL_I2C_GetError(&(obj->handle)) == HAL_I2C_ERROR_AF && delta < I2C_TIMEOUT_TICK); + } while (((HAL_I2C_GetError(&(obj->handle)) & HAL_I2C_ERROR_AF) == HAL_I2C_ERROR_AF) + && (delta < I2C_TIMEOUT_TICK)); return ret; } diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index 77d20894b8..f501896102 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -247,7 +247,7 @@ uint8_t TwoWire::endTransmission(uint8_t sendStop) // uint8_t TwoWire::endTransmission(void) { - return endTransmission(true); + return endTransmission((uint8_t)true); } // must be called in: