From 5abbd67815e634cf6e6c80f12318cd531b983e4e Mon Sep 17 00:00:00 2001 From: xoviat Date: Mon, 3 Nov 2025 14:46:58 -0600 Subject: stm32/adc: fix example --- examples/stm32f4/src/bin/adc_dma.rs | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/examples/stm32f4/src/bin/adc_dma.rs b/examples/stm32f4/src/bin/adc_dma.rs index c24f01753..65adb47e6 100644 --- a/examples/stm32f4/src/bin/adc_dma.rs +++ b/examples/stm32f4/src/bin/adc_dma.rs @@ -4,7 +4,7 @@ use cortex_m::singleton; use defmt::*; use embassy_executor::Spawner; use embassy_stm32::Peripherals; -use embassy_stm32::adc::{Adc, RingBufferedAdc, SampleTime, Sequence}; +use embassy_stm32::adc::{Adc, AdcChannel, RingBufferedAdc, SampleTime}; use embassy_time::Instant; use {defmt_rtt as _, panic_probe as _}; @@ -23,13 +23,24 @@ async fn adc_task(mut p: Peripherals) { let adc = Adc::new(p.ADC1); let adc2 = Adc::new(p.ADC2); - let mut adc: RingBufferedAdc = adc.into_ring_buffered(p.DMA2_CH0, adc_data); - let mut adc2: RingBufferedAdc = adc2.into_ring_buffered(p.DMA2_CH2, adc_data2); - - adc.set_sample_sequence(Sequence::One, &mut p.PA0, SampleTime::CYCLES112); - adc.set_sample_sequence(Sequence::Two, &mut p.PA2, SampleTime::CYCLES112); - adc2.set_sample_sequence(Sequence::One, &mut p.PA1, SampleTime::CYCLES112); - adc2.set_sample_sequence(Sequence::Two, &mut p.PA3, SampleTime::CYCLES112); + let mut adc: RingBufferedAdc = adc.into_ring_buffered( + p.DMA2_CH0, + adc_data, + [ + (&mut p.PA0.degrade_adc(), SampleTime::CYCLES112), + (&mut p.PA2.degrade_adc(), SampleTime::CYCLES112), + ] + .into_iter(), + ); + let mut adc2: RingBufferedAdc = adc2.into_ring_buffered( + p.DMA2_CH2, + adc_data2, + [ + (&mut p.PA1.degrade_adc(), SampleTime::CYCLES112), + (&mut p.PA3.degrade_adc(), SampleTime::CYCLES112), + ] + .into_iter(), + ); // Note that overrun is a big consideration in this implementation. Whatever task is running the adc.read() calls absolutely must circle back around // to the adc.read() call before the DMA buffer is wrapped around > 1 time. At this point, the overrun is so significant that the context of -- cgit