aboutsummaryrefslogtreecommitdiff
path: root/examples/stm32l0
diff options
context:
space:
mode:
authorshufps <[email protected]>2024-02-08 11:07:30 +0100
committershufps <[email protected]>2024-02-08 11:07:30 +0100
commit8dff89bfd99140bc7de48bb5de600a2aeb920681 (patch)
treefd825dd2adc58c696ba5544c2594318b5add57c9 /examples/stm32l0
parentab8f25fd78582aab68c9820e4b4dd9771a1ded65 (diff)
added ADC example running on L0
Diffstat (limited to 'examples/stm32l0')
-rw-r--r--examples/stm32l0/src/bin/adc.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/examples/stm32l0/src/bin/adc.rs b/examples/stm32l0/src/bin/adc.rs
new file mode 100644
index 000000000..93bf5adc6
--- /dev/null
+++ b/examples/stm32l0/src/bin/adc.rs
@@ -0,0 +1,46 @@
1#![no_std]
2#![no_main]
3
4use defmt::*;
5use embassy_stm32::Config;
6use embassy_executor::Spawner;
7use embassy_stm32::adc::{Adc, SampleTime};
8use embassy_stm32::peripherals::ADC;
9use embassy_stm32::{adc, bind_interrupts};
10use embassy_time::{Delay, Timer};
11use {defmt_rtt as _, panic_probe as _};
12
13bind_interrupts!(struct Irqs {
14 ADC1_COMP => adc::InterruptHandler<ADC>;
15});
16
17#[embassy_executor::main]
18async fn main(_spawner: Spawner) {
19 // enable HSI because default is MSI but ADC doesn't support
20 // this as clock source on L0s and uses HSI by default
21 let mut config = Config::default();
22 config.rcc.hsi = true;
23 let p = embassy_stm32::init(config);
24
25 info!("Hello World!");
26
27 let mut adc = Adc::new(p.ADC, Irqs, &mut Delay);
28 adc.set_sample_time(SampleTime::Cycles79_5);
29 let mut pin = p.PA1;
30
31 let mut vrefint = adc.enable_vref(&mut Delay);
32 let vrefint_sample = adc.read(&mut vrefint).await;
33 let convert_to_millivolts = |sample| {
34 // From https://www.st.com/resource/en/datasheet/stm32l051c6.pdf
35 // 6.3.3 Embedded internal reference voltage
36 const VREFINT_MV: u32 = 1224; // mV
37
38 (u32::from(sample) * VREFINT_MV / u32::from(vrefint_sample)) as u16
39 };
40
41 loop {
42 let v = adc.read(&mut pin).await;
43 info!("--> {} - {} mV", v, convert_to_millivolts(v));
44 Timer::after_millis(100).await;
45 }
46}