aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2024-04-16 14:22:39 +0000
committerGitHub <[email protected]>2024-04-16 14:22:39 +0000
commitb3710a31f0340db247f9901837551564629f8efb (patch)
treea5b9758d74b3273e3c73faa8682e6acd02f3e0d4
parente421215dffb379b79d7b44f22fdb1e4539f7d1b7 (diff)
parentd928663baeb851e830e04e469f3a338ad3f4bc15 (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.rs7
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.