diff --git a/include/libopencm3/stm32/i2c.h b/include/libopencm3/stm32/i2c.h index 1cb9a140..cd252431 100644 --- a/include/libopencm3/stm32/i2c.h +++ b/include/libopencm3/stm32/i2c.h @@ -316,6 +316,7 @@ /* --- I2C funtion prototypes----------------------------------------------- */ +void i2c_reset(u32 i2c); void i2c_peripheral_enable(u32 i2c); void i2c_peripheral_disable(u32 i2c); void i2c_send_start(u32 i2c); diff --git a/lib/stm32/i2c.c b/lib/stm32/i2c.c index e1a3b840..41670c30 100644 --- a/lib/stm32/i2c.c +++ b/lib/stm32/i2c.c @@ -18,6 +18,21 @@ */ #include +#include + +void i2c_reset(u32 i2c) +{ + switch (i2c) { + case I2C1: + rcc_peripheral_reset(&RCC_APB1RSTR, RCC_APB1RSTR_I2C1RST); + rcc_peripheral_clear_reset(&RCC_APB1RSTR, RCC_APB1RSTR_I2C1RST); + break; + case I2C2: + rcc_peripheral_reset(&RCC_APB1RSTR, RCC_APB1RSTR_I2C2RST); + rcc_peripheral_clear_reset(&RCC_APB1RSTR, RCC_APB1RSTR_I2C2RST); + break; + } +} void i2c_peripheral_enable(u32 i2c) {