pub struct Adc<'d, T: Instance> { /* private fields */ }Expand description
Analog to Digital driver.
Implementations§
Source§impl<'d, T: DefaultInstance> Adc<'d, T>
impl<'d, T: DefaultInstance> Adc<'d, T>
pub fn new( adc: Peri<'d, T>, _irq: impl Binding<T::Interrupt, InterruptHandler<T>> + 'd, ) -> Self
pub async fn set_resolution(&mut self, res: Resolution)
pub fn resolution(&self) -> Resolution
pub fn enable_vref(&self) -> VrefInt
pub fn enable_temperature(&self) -> Temperature
pub fn sample_time_for_us(&self, us: u32) -> SampleTime
pub fn us_for_cfg(&self, res: Resolution, sample_time: SampleTime) -> u32
Source§impl<'d, T: Instance> Adc<'d, T>
impl<'d, T: Instance> Adc<'d, T>
Sourcepub async fn irq_read(
&mut self,
channel: &mut impl AdcChannel<T>,
sample_time: <T::Regs as BasicAdcRegs>::SampleTime,
) -> u16
pub async fn irq_read( &mut self, channel: &mut impl AdcChannel<T>, sample_time: <T::Regs as BasicAdcRegs>::SampleTime, ) -> u16
Read an ADC pin async using the irq handler.
Sourcepub fn blocking_read(
&mut self,
channel: &mut impl AdcChannel<T>,
sample_time: <T::Regs as BasicAdcRegs>::SampleTime,
) -> u16
pub fn blocking_read( &mut self, channel: &mut impl AdcChannel<T>, sample_time: <T::Regs as BasicAdcRegs>::SampleTime, ) -> u16
Read an ADC pin.
Sourcepub async fn read<'a, 'b: 'a, D: RxDma<T>>(
&mut self,
rx_dma: Peri<'a, D>,
irq: impl Binding<D::Interrupt, InterruptHandler<D>> + 'a,
sequence: impl ExactSizeIterator<Item = (&'a mut AnyAdcChannel<'b, T>, <T::Regs as BasicAdcRegs>::SampleTime)>,
readings: &mut [u16],
)
pub async fn read<'a, 'b: 'a, D: RxDma<T>>( &mut self, rx_dma: Peri<'a, D>, irq: impl Binding<D::Interrupt, InterruptHandler<D>> + 'a, sequence: impl ExactSizeIterator<Item = (&'a mut AnyAdcChannel<'b, T>, <T::Regs as BasicAdcRegs>::SampleTime)>, readings: &mut [u16], )
Read one or multiple ADC regular channels using DMA.
readings must have a length that is a multiple of the length of the sequence iterator.
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(),
Irqs,
[
(&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
Note: Depending on hardware limitations, this method may require channels to be passed in order or require the sequence to have the same sample time for all channnels, depending on the number and properties of the channels in the sequence. This method will panic if the hardware cannot deliver the requested configuration.
Trait Implementations§
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