aboutsummaryrefslogtreecommitdiff
path: root/examples/stm32u5/src
diff options
context:
space:
mode:
authorklownfish <[email protected]>2024-12-18 01:46:26 +0100
committerklownfish <[email protected]>2024-12-18 01:46:26 +0100
commit8eeff8502d56612ce6fea55d01990a21e665ac43 (patch)
tree40e28da5107b9035753271668bca6b6ee0c92d8b /examples/stm32u5/src
parent7b45577704c43465587f611da125d86cb3c85207 (diff)
better u5 adc example
Diffstat (limited to 'examples/stm32u5/src')
-rw-r--r--examples/stm32u5/src/bin/adc.rs67
1 files changed, 44 insertions, 23 deletions
diff --git a/examples/stm32u5/src/bin/adc.rs b/examples/stm32u5/src/bin/adc.rs
index f97facf9e..049b985cf 100644
--- a/examples/stm32u5/src/bin/adc.rs
+++ b/examples/stm32u5/src/bin/adc.rs
@@ -6,6 +6,7 @@ use defmt::{*};
6use defmt_rtt as _; 6use defmt_rtt as _;
7 7
8use embassy_stm32::adc; 8use embassy_stm32::adc;
9use embassy_stm32::adc::AdcChannel;
9use embassy_stm32::adc::adc4; 10use embassy_stm32::adc::adc4;
10use panic_probe as _; 11use panic_probe as _;
11 12
@@ -33,37 +34,57 @@ async fn main(spawner: embassy_executor::Spawner) {
33 34
34 } 35 }
35 36
36 let p = embassy_stm32::init(config); 37 let mut p = embassy_stm32::init(config);
37 info!("Hello World!");
38 38
39 let mut adc = adc::Adc::new(p.ADC1); 39 let mut adc = adc::Adc::new(p.ADC1);
40 let mut adc_pin = p.PA3; 40 let mut adc_pin1 = p.PA3; // A0 on nucleo u5a5
41 let mut adc_pin2 = p.PA2; // A1 on nucleo u5a5
41 adc.set_resolution(adc::Resolution::BITS14); 42 adc.set_resolution(adc::Resolution::BITS14);
42 adc.set_averaging(adc::Averaging::Samples1024); 43 adc.set_averaging(adc::Averaging::Samples1024);
43 adc.set_sample_time(adc::SampleTime::CYCLES1_5); 44 adc.set_sample_time(adc::SampleTime::CYCLES160_5);
44 45 let max = adc::resolution_to_max_count(adc::Resolution::BITS14);
45 let mut adc2 = adc::Adc::new(p.ADC2);
46 let mut adc_pin2 = p.PA5;
47 adc2.set_resolution(adc::Resolution::BITS14);
48 adc2.set_averaging(adc::Averaging::Samples1024);
49 adc2.set_sample_time(adc::SampleTime::CYCLES1_5);
50 46
51 let mut adc4 = adc4::Adc4::new(p.ADC4); 47 let mut adc4 = adc4::Adc4::new(p.ADC4);
52 let mut adc_pin4 = p.PD11; 48 let mut adc4_pin1 = p.PD11;
49 let mut adc4_pin2 = p.PC0;
53 adc4.set_resolution(adc4::Resolution::BITS12); 50 adc4.set_resolution(adc4::Resolution::BITS12);
54 adc4.set_averaging(adc4::Averaging::Samples256); 51 adc4.set_averaging(adc4::Averaging::Samples256);
55 adc4.set_sample_time(adc4::SampleTime::CYCLES1_5); 52 adc4.set_sample_time(adc4::SampleTime::CYCLES1_5);
53 let max4 = adc4::resolution_to_max_count(adc4::Resolution::BITS12);
54
55 let raw: u16 = adc.blocking_read(&mut adc_pin1);
56 let volt: f32 = 3.3 * raw as f32 / max as f32;
57 info!("Read 1 pin 1 {}", volt);
58
59 let raw: u16 = adc.blocking_read(&mut adc_pin2);
60 let volt: f32 = 3.3 * raw as f32 / max as f32;
61 info!("Read 1 pin 2 {}", volt);
62
63 let raw4: u16 = adc4.blocking_read(&mut adc4_pin1);
64 let volt4: f32 = 3.3 * raw4 as f32 / max4 as f32;
65 info!("Read 4 pin 1 {}", volt4);
66
67 let raw4: u16 = adc4.blocking_read(&mut adc4_pin2);
68 let volt4: f32 = 3.3 * raw4 as f32 / max4 as f32;
69 info!("Read 4 pin 2 {}", volt4);
70
71 let mut degraded1 = adc_pin1.degrade_adc();
72 let mut degraded2 = adc_pin2.degrade_adc();
73 let mut measurements = [0u16; 2];
74
75 adc.read(
76 &mut p.GPDMA1_CH0,
77 [
78 (&mut degraded2, adc::SampleTime::CYCLES160_5),
79 (&mut degraded1, adc::SampleTime::CYCLES160_5),
80 ]
81 .into_iter(),
82 &mut measurements,
83 ).await;
84 let volt1: f32 = 3.3 * measurements[1] as f32 / max as f32;
85 let volt2: f32 = 3.3 * measurements[0] as f32 / max as f32;
86
87 info!("Async read 1 pin 1 {}", volt1);
88 info!("Async read 1 pin 2 {}", volt2);
56 89
57 loop {
58 embassy_time::Timer::after_millis(100).await;
59 let raw :u16 = adc.blocking_read(&mut adc_pin);
60 let max = adc::resolution_to_max_count(adc::Resolution::BITS14);
61 let volt: f32 = 3.3 * raw as f32 / max as f32;
62 info!("Read ADC1 {}", volt);
63
64 let raw4 :u16 = adc4.blocking_read(&mut adc_pin4);
65 let max4 = adc4::resolution_to_max_count(adc4::Resolution::BITS12);
66 let volt4: f32 = 3.3 * raw4 as f32 / max4 as f32;
67 info!("Read ADC4 {}", volt4);
68 }
69} \ No newline at end of file 90} \ No newline at end of file