diff --git a/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F4/i2c_api.c b/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F4/i2c_api.c index 868ffd3d12..7ded748f4d 100644 --- a/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F4/i2c_api.c +++ b/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F4/i2c_api.c @@ -100,7 +100,7 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) void i2c_frequency(i2c_t *obj, int hz) { - MBED_ASSERT((hz != 0) && (hz <= 400000)); + MBED_ASSERT((hz > 0) && (hz <= 400000)); I2cHandle.Instance = (I2C_TypeDef *)(obj->i2c); int timeout; @@ -135,8 +135,8 @@ inline int i2c_start(i2c_t *obj) // Clear Acknowledge failure flag __HAL_I2C_CLEAR_FLAG(&I2cHandle, I2C_FLAG_AF); - // Generate the START condition - i2c->CR1 |= I2C_CR1_START; + // Generate the START condition and remove an eventual pending STOP bit + i2c->CR1 = ((i2c->CR1 & ~I2C_CR1_STOP) | I2C_CR1_START); // Wait the START condition has been correctly sent timeout = FLAG_TIMEOUT;