aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2024-04-28 21:24:14 +0200
committerGitHub <[email protected]>2024-04-28 21:24:14 +0200
commit14225eb3a0ddbcad52ff294c075e894641706d07 (patch)
treebe93e5c7bb6e35cdf07354fe3bdeb5d619f7c336 /embassy-stm32
parentf60c0948919b77f535e84d4a5ca5f59a80e40e13 (diff)
parente7bfd7bac90d254ea6dee408564d5e0f8a80ca19 (diff)
Merge pull request #2876 from ftk/timer32fix
stm32 timer: fix 32bit timer off by one ARR error
Diffstat (limited to 'embassy-stm32')
-rw-r--r--embassy-stm32/src/timer/low_level.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/embassy-stm32/src/timer/low_level.rs b/embassy-stm32/src/timer/low_level.rs
index a5d942314..294dff7ea 100644
--- a/embassy-stm32/src/timer/low_level.rs
+++ b/embassy-stm32/src/timer/low_level.rs
@@ -257,7 +257,10 @@ impl<'d, T: CoreInstance> Timer<'d, T> {
257 TimerBits::Bits32 => { 257 TimerBits::Bits32 => {
258 let pclk_ticks_per_timer_period = (timer_f / f) as u64; 258 let pclk_ticks_per_timer_period = (timer_f / f) as u64;
259 let psc: u16 = unwrap!(((pclk_ticks_per_timer_period - 1) / (1 << 32)).try_into()); 259 let psc: u16 = unwrap!(((pclk_ticks_per_timer_period - 1) / (1 << 32)).try_into());
260 let arr: u32 = unwrap!((pclk_ticks_per_timer_period / (psc as u64 + 1)).try_into()); 260 let divide_by = pclk_ticks_per_timer_period / (u64::from(psc) + 1);
261
262 // the timer counts `0..=arr`, we want it to count `0..divide_by`
263 let arr: u32 = unwrap!(u32::try_from(divide_by - 1));
261 264
262 let regs = self.regs_gp32_unchecked(); 265 let regs = self.regs_gp32_unchecked();
263 regs.psc().write_value(psc); 266 regs.psc().write_value(psc);