Remove eventual pending stop bit before start

pull/1400/head
bcostm 2015-10-28 13:17:19 +01:00
parent d459d87749
commit 9a9c147e49
1 changed files with 3 additions and 3 deletions

View File

@ -100,7 +100,7 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl)
void i2c_frequency(i2c_t *obj, int hz) 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); I2cHandle.Instance = (I2C_TypeDef *)(obj->i2c);
int timeout; int timeout;
@ -135,8 +135,8 @@ inline int i2c_start(i2c_t *obj)
// Clear Acknowledge failure flag // Clear Acknowledge failure flag
__HAL_I2C_CLEAR_FLAG(&I2cHandle, I2C_FLAG_AF); __HAL_I2C_CLEAR_FLAG(&I2cHandle, I2C_FLAG_AF);
// Generate the START condition // Generate the START condition and remove an eventual pending STOP bit
i2c->CR1 |= I2C_CR1_START; i2c->CR1 = ((i2c->CR1 & ~I2C_CR1_STOP) | I2C_CR1_START);
// Wait the START condition has been correctly sent // Wait the START condition has been correctly sent
timeout = FLAG_TIMEOUT; timeout = FLAG_TIMEOUT;