diff --git a/embassy-stm32/src/i2c/v2.rs b/embassy-stm32/src/i2c/v2.rs index 71769bbc15..1f53a995d2 100644 --- a/embassy-stm32/src/i2c/v2.rs +++ b/embassy-stm32/src/i2c/v2.rs @@ -855,7 +855,12 @@ impl<'d, M: Mode> SetConfig for I2c<'d, M> { type Config = Hertz; type ConfigError = (); fn set_config(&mut self, config: &Self::Config) -> Result<(), ()> { + self.info.regs.cr1().modify(|reg| { + reg.set_pe(false); + }); + let timings = Timings::new(self.kernel_clock, *config); + self.info.regs.timingr().write(|reg| { reg.set_presc(timings.prescale); reg.set_scll(timings.scll); @@ -864,6 +869,10 @@ impl<'d, M: Mode> SetConfig for I2c<'d, M> { reg.set_scldel(timings.scldel); }); + self.info.regs.cr1().modify(|reg| { + reg.set_pe(true); + }); + Ok(()) } }