diff --git a/cpu/stm32/periph/i2c_1.c b/cpu/stm32/periph/i2c_1.c index 7d8b037e32..391a293bab 100644 --- a/cpu/stm32/periph/i2c_1.c +++ b/cpu/stm32/periph/i2c_1.c @@ -143,6 +143,9 @@ int i2c_acquire(i2c_t dev) periph_clk_en(i2c_config[dev].bus, i2c_config[dev].rcc_mask); + /* enable device */ + i2c_config[dev].dev->CR1 |= I2C_CR1_PE; + return 0; } @@ -150,6 +153,11 @@ void i2c_release(i2c_t dev) { assert(dev < I2C_NUMOF); + /* disable device */ + i2c_config[dev].dev->CR1 &= ~(I2C_CR1_PE); + + _wait_for_bus(i2c_config[dev].dev); + periph_clk_dis(i2c_config[dev].bus, i2c_config[dev].rcc_mask); mutex_unlock(&locks[dev]); diff --git a/cpu/stm32/periph/i2c_2.c b/cpu/stm32/periph/i2c_2.c index 733a2f26b1..d31f28989b 100644 --- a/cpu/stm32/periph/i2c_2.c +++ b/cpu/stm32/periph/i2c_2.c @@ -193,6 +193,9 @@ int i2c_acquire(i2c_t dev) periph_clk_en(i2c_config[dev].bus, i2c_config[dev].rcc_mask); + /* enable device */ + i2c_config[dev].dev->CR1 |= I2C_CR1_PE; + return 0; } @@ -200,6 +203,11 @@ void i2c_release(i2c_t dev) { assert(dev < I2C_NUMOF); + /* disable device */ + i2c_config[dev].dev->CR1 &= ~(I2C_CR1_PE); + + _wait_for_bus(i2c_config[dev].dev); + periph_clk_dis(i2c_config[dev].bus, i2c_config[dev].rcc_mask); #ifdef STM32_PM_STOP