aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/stm32c0/src/bin/adc.rs57
1 files changed, 57 insertions, 0 deletions
diff --git a/examples/stm32c0/src/bin/adc.rs b/examples/stm32c0/src/bin/adc.rs
new file mode 100644
index 000000000..10481f4d2
--- /dev/null
+++ b/examples/stm32c0/src/bin/adc.rs
@@ -0,0 +1,57 @@
1#![no_std]
2#![no_main]
3
4use defmt::*;
5use embassy_executor::Spawner;
6use embassy_stm32::adc::vals::Scandir;
7use embassy_stm32::adc::{Adc, AdcChannel, AnyAdcChannel, Resolution, SampleTime};
8use embassy_stm32::peripherals::ADC1;
9use embassy_time::Timer;
10use {defmt_rtt as _, panic_probe as _};
11
12#[embassy_executor::main]
13async fn main(_spawner: Spawner) {
14 let config = Default::default();
15 let p = embassy_stm32::init(config);
16
17 info!("ADC STM32C0 example.");
18
19 // We need to set certain sample time to be able to read temp sensor.
20 let mut adc = Adc::new(p.ADC1, SampleTime::CYCLES12_5, Resolution::BITS12);
21 let mut temp = adc.enable_temperature().degrade_adc();
22 let mut vref = adc.enable_vrefint().degrade_adc();
23 let mut pin0 = p.PA0.degrade_adc();
24
25 let mut dma = p.DMA1_CH1;
26 let mut read_buffer: [u16; 3] = [0; 3];
27
28 loop {
29 info!("============================");
30 let blocking_temp = adc.blocking_read(&mut temp);
31 let blocking_vref = adc.blocking_read(&mut vref);
32 let blocing_pin0 = adc.blocking_read(&mut pin0);
33 info!(
34 "Blocking ADC read: vref = {}, temp = {}, pin0 = {}.",
35 blocking_vref, blocking_temp, blocing_pin0
36 );
37
38 let channels_seqence: [&mut AnyAdcChannel<ADC1>; 3] = [&mut vref, &mut temp, &mut pin0];
39 adc.read(&mut dma, channels_seqence.into_iter(), &mut read_buffer).await;
40 // Values are ordered according to hardware ADC channel number!
41 info!(
42 "DMA ADC read in set: vref = {}, temp = {}, pin0 = {}.",
43 read_buffer[0], read_buffer[1], read_buffer[2]
44 );
45
46 let hw_channel_selection: u32 =
47 (1 << temp.get_hw_channel()) + (1 << vref.get_hw_channel()) + (1 << pin0.get_hw_channel());
48 adc.read_in_hw_order(&mut dma, hw_channel_selection, Scandir::UP, &mut read_buffer)
49 .await;
50 info!(
51 "DMA ADC read in hardware order: vref = {}, temp = {}, pin0 = {}.",
52 read_buffer[2], read_buffer[1], read_buffer[0]
53 );
54
55 Timer::after_millis(2000).await;
56 }
57}