From c120efad5bbd7f95615e913100874d27c34cb389 Mon Sep 17 00:00:00 2001 From: Andres Vahter <andres@vahter.me> Date: Tue, 2 Jul 2024 14:23:44 +0300 Subject: [PATCH] stm32 adc read_async: add asserts for buf len --- embassy-stm32/src/adc/v3.rs | 10 +++++++--- embassy-stm32/src/adc/v4.rs | 9 ++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/embassy-stm32/src/adc/v3.rs b/embassy-stm32/src/adc/v3.rs index 559751555..afdfc4e4c 100644 --- a/embassy-stm32/src/adc/v3.rs +++ b/embassy-stm32/src/adc/v3.rs @@ -262,10 +262,13 @@ impl<'d, T: Instance> Adc<'d, T> { &mut self, rx_dma: &mut impl RxDma<T>, sequence: impl ExactSizeIterator<Item = (&mut AnyAdcChannel<T>, SampleTime)>, - data: &mut [u16], + readings: &mut [u16], ) { assert!(sequence.len() != 0, "Asynchronous read sequence cannot be empty"); - + assert!( + sequence.len() == readings.len(), + "Sequence length must be equal to readings length" + ); assert!( sequence.len() <= 16, "Asynchronous read sequence cannot be more than 16 in length" @@ -357,7 +360,7 @@ impl<'d, T: Instance> Adc<'d, T> { rx_dma, request, T::regs().dr().as_ptr() as *mut u16, - data, + readings, Default::default(), ) }; @@ -431,6 +434,7 @@ impl<'d, T: Instance> Adc<'d, T> { fn set_channel_sample_time(_ch: u8, sample_time: SampleTime) { cfg_if! { if #[cfg(any(adc_g0, adc_u0))] { + // On G0 and U6 all channels use the same sampling time. T::regs().smpr().modify(|reg| reg.set_smp1(sample_time.into())); } else if #[cfg(adc_h5)] { match _ch { diff --git a/embassy-stm32/src/adc/v4.rs b/embassy-stm32/src/adc/v4.rs index f4b62d80e..4261b9b14 100644 --- a/embassy-stm32/src/adc/v4.rs +++ b/embassy-stm32/src/adc/v4.rs @@ -290,10 +290,13 @@ impl<'d, T: Instance> Adc<'d, T> { &mut self, rx_dma: &mut impl RxDma<T>, sequence: impl ExactSizeIterator<Item = (&mut AnyAdcChannel<T>, SampleTime)>, - data: &mut [u16], + readings: &mut [u16], ) { assert!(sequence.len() != 0, "Asynchronous read sequence cannot be empty"); - + assert!( + sequence.len() == readings.len(), + "Sequence length must be equal to readings length" + ); assert!( sequence.len() <= 16, "Asynchronous read sequence cannot be more than 16 in length" @@ -352,7 +355,7 @@ impl<'d, T: Instance> Adc<'d, T> { rx_dma, request, T::regs().dr().as_ptr() as *mut u16, - data, + readings, Default::default(), ) };