diff options
| author | Dario Nieuwenhuis <[email protected]> | 2024-04-28 21:24:14 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-04-28 21:24:14 +0200 |
| commit | 14225eb3a0ddbcad52ff294c075e894641706d07 (patch) | |
| tree | be93e5c7bb6e35cdf07354fe3bdeb5d619f7c336 /embassy-stm32 | |
| parent | f60c0948919b77f535e84d4a5ca5f59a80e40e13 (diff) | |
| parent | e7bfd7bac90d254ea6dee408564d5e0f8a80ca19 (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.rs | 5 |
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); |
