diff options
| author | Dario Nieuwenhuis <[email protected]> | 2024-04-16 14:22:39 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-04-16 14:22:39 +0000 |
| commit | b3710a31f0340db247f9901837551564629f8efb (patch) | |
| tree | a5b9758d74b3273e3c73faa8682e6acd02f3e0d4 | |
| parent | e421215dffb379b79d7b44f22fdb1e4539f7d1b7 (diff) | |
| parent | d928663baeb851e830e04e469f3a338ad3f4bc15 (diff) | |
Merge pull request #2825 from MaxiluxSystems/fix/adc-blocking-delay-overflow
stm32: adc: fix blocking_delay_us() overflowing when sys freq is high
| -rw-r--r-- | embassy-stm32/src/adc/mod.rs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/embassy-stm32/src/adc/mod.rs b/embassy-stm32/src/adc/mod.rs index 12c5751bd..2ff2ed6a8 100644 --- a/embassy-stm32/src/adc/mod.rs +++ b/embassy-stm32/src/adc/mod.rs | |||
| @@ -76,7 +76,12 @@ pub(crate) fn blocking_delay_us(us: u32) { | |||
| 76 | #[cfg(time)] | 76 | #[cfg(time)] |
| 77 | embassy_time::block_for(embassy_time::Duration::from_micros(us)); | 77 | embassy_time::block_for(embassy_time::Duration::from_micros(us)); |
| 78 | #[cfg(not(time))] | 78 | #[cfg(not(time))] |
| 79 | cortex_m::asm::delay(unsafe { crate::rcc::get_freqs() }.sys.unwrap().0 * us / 1_000_000); | 79 | { |
| 80 | let freq = unsafe { crate::rcc::get_freqs() }.sys.unwrap().0 as u64; | ||
| 81 | let us = us as u64; | ||
| 82 | let cycles = freq * us / 1_000_000; | ||
| 83 | cortex_m::asm::delay(cycles as u32); | ||
| 84 | } | ||
| 80 | } | 85 | } |
| 81 | 86 | ||
| 82 | /// ADC instance. | 87 | /// ADC instance. |
