pub struct Adc<'d, T: AnyInstance> { /* private fields */ }Expand description
Analog to Digital driver.
Implementations§
Source§impl<'d, T: Instance> Adc<'d, T>
impl<'d, T: Instance> Adc<'d, T>
Sourcepub fn new(adc: Peri<'d, T>) -> Self
pub fn new(adc: Peri<'d, T>) -> Self
Initialize the ADC leaving any analog clock at reset value. For G0 and WL, this is the async clock without prescaler.
pub fn new_with_config(adc: Peri<'d, T>, config: AdcConfig) -> Self
pub fn enable_vrefint(&self) -> VrefInt
pub fn enable_temperature(&self) -> Temperature
pub fn enable_vbat(&self) -> Vbat
pub fn disable_vbat(&self)
Source§impl<'d, T: AnyInstance> Adc<'d, T>
impl<'d, T: AnyInstance> Adc<'d, T>
Sourcepub fn blocking_read(
&mut self,
channel: &mut impl AdcChannel<T>,
sample_time: T::SampleTime,
) -> u16
pub fn blocking_read( &mut self, channel: &mut impl AdcChannel<T>, sample_time: T::SampleTime, ) -> u16
Read an ADC pin.
Sourcepub async fn read(
&mut self,
rx_dma: Peri<'_, impl RxDma<T>>,
sequence: impl ExactSizeIterator<Item = (&mut AnyAdcChannel<T>, T::SampleTime)>,
readings: &mut [u16],
)
pub async fn read( &mut self, rx_dma: Peri<'_, impl RxDma<T>>, sequence: impl ExactSizeIterator<Item = (&mut AnyAdcChannel<T>, T::SampleTime)>, readings: &mut [u16], )
Read one or multiple ADC regular channels using DMA.
sequence iterator and readings must have the same length.
Example
ⓘ
use embassy_stm32::adc::{Adc, AdcChannel}
let mut adc = Adc::new(p.ADC1);
let mut adc_pin0 = p.PA0.into();
let mut adc_pin1 = p.PA1.into();
let mut measurements = [0u16; 2];
adc.read(
p.DMA1_CH2.reborrow(),
[
(&mut *adc_pin0, SampleTime::CYCLES160_5),
(&mut *adc_pin1, SampleTime::CYCLES160_5),
]
.into_iter(),
&mut measurements,
)
.await;
defmt::info!("measurements: {}", measurements);Note: This is not very efficient as the ADC needs to be reconfigured for each read. Use
into_ring_buffered, into_ring_buffered_and_injected
In STM32C0, channels bigger than 14 cannot be read using sequencer, so you have to use either blocking reads or use the mechanism to read in HW order (CHSELRMOD=0).
In addtion, on STM320, this method will panic if the channels are not passed in order
Auto Trait Implementations§
impl<'d, T> Freeze for Adc<'d, T>where
T: Freeze,
impl<'d, T> RefUnwindSafe for Adc<'d, T>where
T: RefUnwindSafe,
impl<'d, T> Send for Adc<'d, T>where
T: Send,
impl<'d, T> Sync for Adc<'d, T>where
T: Sync,
impl<'d, T> Unpin for Adc<'d, T>where
T: Unpin,
impl<'d, T> !UnwindSafe for Adc<'d, T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more