stm32/i2c: disable peripheral when changing timings

This commit is contained in:
Aaron Griffith 2025-02-27 06:50:01 -05:00
parent 17301c00e9
commit 03f73ce339

View File

@ -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(())
}
}