aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2024-04-10 19:27:08 +0000
committerGitHub <[email protected]>2024-04-10 19:27:08 +0000
commitb10926370544f1002955ff5f49f59d27dfaa1eda (patch)
tree1c56fd7753323ad603f77c4a7121ae82cc170964
parentc575c7dc6cab49a99f36eedbdd41e97868e1102b (diff)
parent6e24dc58c6395cc5d733d676986d3b336ce7a220 (diff)
Merge pull request #2797 from andresv/stm32-adc-eh1-delayns
stm32 adc: remove delay trait
-rw-r--r--embassy-stm32/src/adc/f1.rs12
-rw-r--r--embassy-stm32/src/adc/f3.rs11
-rw-r--r--embassy-stm32/src/adc/mod.rs9
-rw-r--r--embassy-stm32/src/adc/v1.rs15
-rw-r--r--embassy-stm32/src/adc/v2.rs9
-rw-r--r--embassy-stm32/src/adc/v3.rs16
-rw-r--r--embassy-stm32/src/adc/v4.rs13
-rw-r--r--examples/stm32f0/src/bin/adc.rs6
-rw-r--r--examples/stm32f1/src/bin/adc.rs6
-rw-r--r--examples/stm32f334/src/bin/adc.rs6
-rw-r--r--examples/stm32f334/src/bin/opamp.rs6
-rw-r--r--examples/stm32f4/src/bin/adc.rs2
-rw-r--r--examples/stm32f7/src/bin/adc.rs4
-rw-r--r--examples/stm32g4/src/bin/adc.rs4
-rw-r--r--examples/stm32h7/src/bin/adc.rs4
-rw-r--r--examples/stm32l0/src/bin/adc.rs6
-rw-r--r--examples/stm32l4/src/bin/adc.rs3
-rw-r--r--tests/stm32/src/bin/dac.rs4
18 files changed, 68 insertions, 68 deletions
diff --git a/embassy-stm32/src/adc/f1.rs b/embassy-stm32/src/adc/f1.rs
index cecf67947..80eaecc14 100644
--- a/embassy-stm32/src/adc/f1.rs
+++ b/embassy-stm32/src/adc/f1.rs
@@ -3,8 +3,8 @@ use core::marker::PhantomData;
3use core::task::Poll; 3use core::task::Poll;
4 4
5use embassy_hal_internal::into_ref; 5use embassy_hal_internal::into_ref;
6use embedded_hal_02::blocking::delay::DelayUs;
7 6
7use super::blocking_delay_us;
8use crate::adc::{Adc, AdcPin, Instance, SampleTime}; 8use crate::adc::{Adc, AdcPin, Instance, SampleTime};
9use crate::time::Hertz; 9use crate::time::Hertz;
10use crate::{interrupt, Peripheral}; 10use crate::{interrupt, Peripheral};
@@ -48,14 +48,14 @@ impl<T: Instance> super::SealedAdcPin<T> for Temperature {
48} 48}
49 49
50impl<'d, T: Instance> Adc<'d, T> { 50impl<'d, T: Instance> Adc<'d, T> {
51 pub fn new(adc: impl Peripheral<P = T> + 'd, delay: &mut impl DelayUs<u32>) -> Self { 51 pub fn new(adc: impl Peripheral<P = T> + 'd) -> Self {
52 into_ref!(adc); 52 into_ref!(adc);
53 T::enable_and_reset(); 53 T::enable_and_reset();
54 T::regs().cr2().modify(|reg| reg.set_adon(true)); 54 T::regs().cr2().modify(|reg| reg.set_adon(true));
55 55
56 // 11.4: Before starting a calibration, the ADC must have been in power-on state (ADON bit = ‘1’) 56 // 11.4: Before starting a calibration, the ADC must have been in power-on state (ADON bit = ‘1’)
57 // for at least two ADC clock cycles 57 // for at least two ADC clock cycles.
58 delay.delay_us((1_000_000 * 2) / Self::freq().0 + 1); 58 blocking_delay_us((1_000_000 * 2) / Self::freq().0 + 1);
59 59
60 // Reset calibration 60 // Reset calibration
61 T::regs().cr2().modify(|reg| reg.set_rstcal(true)); 61 T::regs().cr2().modify(|reg| reg.set_rstcal(true));
@@ -70,7 +70,7 @@ impl<'d, T: Instance> Adc<'d, T> {
70 } 70 }
71 71
72 // One cycle after calibration 72 // One cycle after calibration
73 delay.delay_us((1_000_000) / Self::freq().0 + 1); 73 blocking_delay_us((1_000_000 * 1) / Self::freq().0 + 1);
74 74
75 Self { 75 Self {
76 adc, 76 adc,
@@ -95,7 +95,7 @@ impl<'d, T: Instance> Adc<'d, T> {
95 } 95 }
96 } 96 }
97 97
98 pub fn enable_vref(&self, _delay: &mut impl DelayUs<u32>) -> Vref { 98 pub fn enable_vref(&self) -> Vref {
99 T::regs().cr2().modify(|reg| { 99 T::regs().cr2().modify(|reg| {
100 reg.set_tsvrefe(true); 100 reg.set_tsvrefe(true);
101 }); 101 });
diff --git a/embassy-stm32/src/adc/f3.rs b/embassy-stm32/src/adc/f3.rs
index c5581dba1..c22a3fe4a 100644
--- a/embassy-stm32/src/adc/f3.rs
+++ b/embassy-stm32/src/adc/f3.rs
@@ -3,8 +3,8 @@ use core::marker::PhantomData;
3use core::task::Poll; 3use core::task::Poll;
4 4
5use embassy_hal_internal::into_ref; 5use embassy_hal_internal::into_ref;
6use embedded_hal_02::blocking::delay::DelayUs;
7 6
7use super::blocking_delay_us;
8use crate::adc::{Adc, AdcPin, Instance, SampleTime}; 8use crate::adc::{Adc, AdcPin, Instance, SampleTime};
9use crate::interrupt::typelevel::Interrupt; 9use crate::interrupt::typelevel::Interrupt;
10use crate::time::Hertz; 10use crate::time::Hertz;
@@ -58,7 +58,6 @@ impl<'d, T: Instance> Adc<'d, T> {
58 pub fn new( 58 pub fn new(
59 adc: impl Peripheral<P = T> + 'd, 59 adc: impl Peripheral<P = T> + 'd,
60 _irq: impl interrupt::typelevel::Binding<T::Interrupt, InterruptHandler<T>> + 'd, 60 _irq: impl interrupt::typelevel::Binding<T::Interrupt, InterruptHandler<T>> + 'd,
61 delay: &mut impl DelayUs<u32>,
62 ) -> Self { 61 ) -> Self {
63 use crate::pac::adc::vals; 62 use crate::pac::adc::vals;
64 63
@@ -71,7 +70,7 @@ impl<'d, T: Instance> Adc<'d, T> {
71 T::regs().cr().modify(|w| w.set_advregen(vals::Advregen::ENABLED)); 70 T::regs().cr().modify(|w| w.set_advregen(vals::Advregen::ENABLED));
72 71
73 // Wait for the regulator to stabilize 72 // Wait for the regulator to stabilize
74 delay.delay_us(10); 73 blocking_delay_us(10);
75 74
76 assert!(!T::regs().cr().read().aden()); 75 assert!(!T::regs().cr().read().aden());
77 76
@@ -81,8 +80,8 @@ impl<'d, T: Instance> Adc<'d, T> {
81 80
82 while T::regs().cr().read().adcal() {} 81 while T::regs().cr().read().adcal() {}
83 82
84 // Wait more than 4 clock cycles after adcal is cleared (RM0364 p. 223) 83 // Wait more than 4 clock cycles after adcal is cleared (RM0364 p. 223).
85 delay.delay_us(1 + (6 * 1_000_000 / Self::freq().0)); 84 blocking_delay_us((1_000_000 * 4) / Self::freq().0 + 1);
86 85
87 // Enable the adc 86 // Enable the adc
88 T::regs().cr().modify(|w| w.set_aden(true)); 87 T::regs().cr().modify(|w| w.set_aden(true));
@@ -117,7 +116,7 @@ impl<'d, T: Instance> Adc<'d, T> {
117 } 116 }
118 } 117 }
119 118
120 pub fn enable_vref(&self, _delay: &mut impl DelayUs<u32>) -> Vref { 119 pub fn enable_vref(&self) -> Vref {
121 T::common_regs().ccr().modify(|w| w.set_vrefen(true)); 120 T::common_regs().ccr().modify(|w| w.set_vrefen(true));
122 121
123 Vref {} 122 Vref {}
diff --git a/embassy-stm32/src/adc/mod.rs b/embassy-stm32/src/adc/mod.rs
index ead2357ce..24dd7cc3c 100644
--- a/embassy-stm32/src/adc/mod.rs
+++ b/embassy-stm32/src/adc/mod.rs
@@ -69,6 +69,15 @@ trait SealedInternalChannel<T> {
69 fn channel(&self) -> u8; 69 fn channel(&self) -> u8;
70} 70}
71 71
72/// Performs a busy-wait delay for a specified number of microseconds.
73#[allow(unused)]
74pub(crate) fn blocking_delay_us(us: u32) {
75 #[cfg(time)]
76 embassy_time::block_for(embassy_time::Duration::from_micros(us));
77 #[cfg(not(time))]
78 cortex_m::asm::delay(unsafe { crate::rcc::get_freqs() }.sys.unwrap().0 * us / 1_000_000);
79}
80
72/// ADC instance. 81/// ADC instance.
73#[cfg(not(any(adc_f1, adc_v1, adc_l0, adc_v2, adc_v3, adc_v4, adc_f3, adc_f3_v1_1, adc_g0, adc_h5)))] 82#[cfg(not(any(adc_f1, adc_v1, adc_l0, adc_v2, adc_v3, adc_v4, adc_f3, adc_f3_v1_1, adc_g0, adc_h5)))]
74#[allow(private_bounds)] 83#[allow(private_bounds)]
diff --git a/embassy-stm32/src/adc/v1.rs b/embassy-stm32/src/adc/v1.rs
index e9b46be80..1dda28cf2 100644
--- a/embassy-stm32/src/adc/v1.rs
+++ b/embassy-stm32/src/adc/v1.rs
@@ -3,10 +3,10 @@ use core::marker::PhantomData;
3use core::task::Poll; 3use core::task::Poll;
4 4
5use embassy_hal_internal::into_ref; 5use embassy_hal_internal::into_ref;
6use embedded_hal_02::blocking::delay::DelayUs;
7#[cfg(adc_l0)] 6#[cfg(adc_l0)]
8use stm32_metapac::adc::vals::Ckmode; 7use stm32_metapac::adc::vals::Ckmode;
9 8
9use super::blocking_delay_us;
10use crate::adc::{Adc, AdcPin, Instance, Resolution, SampleTime}; 10use crate::adc::{Adc, AdcPin, Instance, Resolution, SampleTime};
11use crate::interrupt::typelevel::Interrupt; 11use crate::interrupt::typelevel::Interrupt;
12use crate::peripherals::ADC; 12use crate::peripherals::ADC;
@@ -65,7 +65,6 @@ impl<'d, T: Instance> Adc<'d, T> {
65 pub fn new( 65 pub fn new(
66 adc: impl Peripheral<P = T> + 'd, 66 adc: impl Peripheral<P = T> + 'd,
67 _irq: impl interrupt::typelevel::Binding<T::Interrupt, InterruptHandler<T>> + 'd, 67 _irq: impl interrupt::typelevel::Binding<T::Interrupt, InterruptHandler<T>> + 'd,
68 delay: &mut impl DelayUs<u32>,
69 ) -> Self { 68 ) -> Self {
70 into_ref!(adc); 69 into_ref!(adc);
71 T::enable_and_reset(); 70 T::enable_and_reset();
@@ -74,7 +73,7 @@ impl<'d, T: Instance> Adc<'d, T> {
74 // 73 //
75 // Table 57. ADC characteristics 74 // Table 57. ADC characteristics
76 // tstab = 14 * 1/fadc 75 // tstab = 14 * 1/fadc
77 delay.delay_us(1); 76 blocking_delay_us(1);
78 77
79 // set default PCKL/2 on L0s because HSI is disabled in the default clock config 78 // set default PCKL/2 on L0s because HSI is disabled in the default clock config
80 #[cfg(adc_l0)] 79 #[cfg(adc_l0)]
@@ -114,7 +113,7 @@ impl<'d, T: Instance> Adc<'d, T> {
114 } 113 }
115 114
116 #[cfg(not(adc_l0))] 115 #[cfg(not(adc_l0))]
117 pub fn enable_vbat(&self, _delay: &mut impl DelayUs<u32>) -> Vbat { 116 pub fn enable_vbat(&self) -> Vbat {
118 // SMP must be ≥ 56 ADC clock cycles when using HSI14. 117 // SMP must be ≥ 56 ADC clock cycles when using HSI14.
119 // 118 //
120 // 6.3.20 Vbat monitoring characteristics 119 // 6.3.20 Vbat monitoring characteristics
@@ -123,22 +122,22 @@ impl<'d, T: Instance> Adc<'d, T> {
123 Vbat 122 Vbat
124 } 123 }
125 124
126 pub fn enable_vref(&self, delay: &mut impl DelayUs<u32>) -> Vref { 125 pub fn enable_vref(&self) -> Vref {
127 // Table 28. Embedded internal reference voltage 126 // Table 28. Embedded internal reference voltage
128 // tstart = 10μs 127 // tstart = 10μs
129 T::regs().ccr().modify(|reg| reg.set_vrefen(true)); 128 T::regs().ccr().modify(|reg| reg.set_vrefen(true));
130 delay.delay_us(10); 129 blocking_delay_us(10);
131 Vref 130 Vref
132 } 131 }
133 132
134 pub fn enable_temperature(&self, delay: &mut impl DelayUs<u32>) -> Temperature { 133 pub fn enable_temperature(&self) -> Temperature {
135 // SMP must be ≥ 56 ADC clock cycles when using HSI14. 134 // SMP must be ≥ 56 ADC clock cycles when using HSI14.
136 // 135 //
137 // 6.3.19 Temperature sensor characteristics 136 // 6.3.19 Temperature sensor characteristics
138 // tstart ≤ 10μs 137 // tstart ≤ 10μs
139 // ts_temp ≥ 4μs 138 // ts_temp ≥ 4μs
140 T::regs().ccr().modify(|reg| reg.set_tsen(true)); 139 T::regs().ccr().modify(|reg| reg.set_tsen(true));
141 delay.delay_us(10); 140 blocking_delay_us(10);
142 Temperature 141 Temperature
143 } 142 }
144 143
diff --git a/embassy-stm32/src/adc/v2.rs b/embassy-stm32/src/adc/v2.rs
index a43eb72db..7771cf768 100644
--- a/embassy-stm32/src/adc/v2.rs
+++ b/embassy-stm32/src/adc/v2.rs
@@ -1,6 +1,6 @@
1use embassy_hal_internal::into_ref; 1use embassy_hal_internal::into_ref;
2use embedded_hal_02::blocking::delay::DelayUs;
3 2
3use super::blocking_delay_us;
4use crate::adc::{Adc, AdcPin, Instance, Resolution, SampleTime}; 4use crate::adc::{Adc, AdcPin, Instance, Resolution, SampleTime};
5use crate::peripherals::ADC1; 5use crate::peripherals::ADC1;
6use crate::time::Hertz; 6use crate::time::Hertz;
@@ -11,9 +11,6 @@ pub const VREF_DEFAULT_MV: u32 = 3300;
11/// VREF voltage used for factory calibration of VREFINTCAL register. 11/// VREF voltage used for factory calibration of VREFINTCAL register.
12pub const VREF_CALIB_MV: u32 = 3300; 12pub const VREF_CALIB_MV: u32 = 3300;
13 13
14/// ADC turn-on time
15pub const ADC_POWERUP_TIME_US: u32 = 3;
16
17pub struct VrefInt; 14pub struct VrefInt;
18impl AdcPin<ADC1> for VrefInt {} 15impl AdcPin<ADC1> for VrefInt {}
19impl super::SealedAdcPin<ADC1> for VrefInt { 16impl super::SealedAdcPin<ADC1> for VrefInt {
@@ -97,7 +94,7 @@ impl<'d, T> Adc<'d, T>
97where 94where
98 T: Instance, 95 T: Instance,
99{ 96{
100 pub fn new(adc: impl Peripheral<P = T> + 'd, delay: &mut impl DelayUs<u32>) -> Self { 97 pub fn new(adc: impl Peripheral<P = T> + 'd) -> Self {
101 into_ref!(adc); 98 into_ref!(adc);
102 T::enable_and_reset(); 99 T::enable_and_reset();
103 100
@@ -107,7 +104,7 @@ where
107 reg.set_adon(true); 104 reg.set_adon(true);
108 }); 105 });
109 106
110 delay.delay_us(ADC_POWERUP_TIME_US); 107 blocking_delay_us(3);
111 108
112 Self { 109 Self {
113 adc, 110 adc,
diff --git a/embassy-stm32/src/adc/v3.rs b/embassy-stm32/src/adc/v3.rs
index e25630be2..4fd8558ba 100644
--- a/embassy-stm32/src/adc/v3.rs
+++ b/embassy-stm32/src/adc/v3.rs
@@ -1,7 +1,7 @@
1use cfg_if::cfg_if; 1use cfg_if::cfg_if;
2use embassy_hal_internal::into_ref; 2use embassy_hal_internal::into_ref;
3use embedded_hal_02::blocking::delay::DelayUs;
4 3
4use super::blocking_delay_us;
5use crate::adc::{Adc, AdcPin, Instance, Resolution, SampleTime}; 5use crate::adc::{Adc, AdcPin, Instance, Resolution, SampleTime};
6use crate::Peripheral; 6use crate::Peripheral;
7 7
@@ -74,7 +74,7 @@ cfg_if! {
74} 74}
75 75
76impl<'d, T: Instance> Adc<'d, T> { 76impl<'d, T: Instance> Adc<'d, T> {
77 pub fn new(adc: impl Peripheral<P = T> + 'd, delay: &mut impl DelayUs<u32>) -> Self { 77 pub fn new(adc: impl Peripheral<P = T> + 'd) -> Self {
78 into_ref!(adc); 78 into_ref!(adc);
79 T::enable_and_reset(); 79 T::enable_and_reset();
80 T::regs().cr().modify(|reg| { 80 T::regs().cr().modify(|reg| {
@@ -88,7 +88,7 @@ impl<'d, T: Instance> Adc<'d, T> {
88 reg.set_chselrmod(false); 88 reg.set_chselrmod(false);
89 }); 89 });
90 90
91 delay.delay_us(20); 91 blocking_delay_us(20);
92 92
93 T::regs().cr().modify(|reg| { 93 T::regs().cr().modify(|reg| {
94 reg.set_adcal(true); 94 reg.set_adcal(true);
@@ -98,7 +98,7 @@ impl<'d, T: Instance> Adc<'d, T> {
98 // spin 98 // spin
99 } 99 }
100 100
101 delay.delay_us(1); 101 blocking_delay_us(1);
102 102
103 Self { 103 Self {
104 adc, 104 adc,
@@ -106,7 +106,7 @@ impl<'d, T: Instance> Adc<'d, T> {
106 } 106 }
107 } 107 }
108 108
109 pub fn enable_vrefint(&self, delay: &mut impl DelayUs<u32>) -> VrefInt { 109 pub fn enable_vrefint(&self) -> VrefInt {
110 #[cfg(not(adc_g0))] 110 #[cfg(not(adc_g0))]
111 T::common_regs().ccr().modify(|reg| { 111 T::common_regs().ccr().modify(|reg| {
112 reg.set_vrefen(true); 112 reg.set_vrefen(true);
@@ -117,10 +117,8 @@ impl<'d, T: Instance> Adc<'d, T> {
117 }); 117 });
118 118
119 // "Table 24. Embedded internal voltage reference" states that it takes a maximum of 12 us 119 // "Table 24. Embedded internal voltage reference" states that it takes a maximum of 12 us
120 // to stabilize the internal voltage reference, we wait a little more. 120 // to stabilize the internal voltage reference.
121 // TODO: delay 15us 121 blocking_delay_us(15);
122 //cortex_m::asm::delay(20_000_000);
123 delay.delay_us(15);
124 122
125 VrefInt {} 123 VrefInt {}
126 } 124 }
diff --git a/embassy-stm32/src/adc/v4.rs b/embassy-stm32/src/adc/v4.rs
index 1ae25bea2..ca87b41ee 100644
--- a/embassy-stm32/src/adc/v4.rs
+++ b/embassy-stm32/src/adc/v4.rs
@@ -1,9 +1,8 @@
1use embedded_hal_02::blocking::delay::DelayUs;
2#[allow(unused)] 1#[allow(unused)]
3use pac::adc::vals::{Adcaldif, Boost, Difsel, Exten, Pcsel}; 2use pac::adc::vals::{Adcaldif, Boost, Difsel, Exten, Pcsel};
4use pac::adccommon::vals::Presc; 3use pac::adccommon::vals::Presc;
5 4
6use super::{Adc, AdcPin, Instance, InternalChannel, Resolution, SampleTime}; 5use super::{blocking_delay_us, Adc, AdcPin, Instance, InternalChannel, Resolution, SampleTime};
7use crate::time::Hertz; 6use crate::time::Hertz;
8use crate::{pac, Peripheral}; 7use crate::{pac, Peripheral};
9 8
@@ -129,7 +128,7 @@ impl Prescaler {
129 128
130impl<'d, T: Instance> Adc<'d, T> { 129impl<'d, T: Instance> Adc<'d, T> {
131 /// Create a new ADC driver. 130 /// Create a new ADC driver.
132 pub fn new(adc: impl Peripheral<P = T> + 'd, delay: &mut impl DelayUs<u16>) -> Self { 131 pub fn new(adc: impl Peripheral<P = T> + 'd) -> Self {
133 embassy_hal_internal::into_ref!(adc); 132 embassy_hal_internal::into_ref!(adc);
134 T::enable_and_reset(); 133 T::enable_and_reset();
135 134
@@ -161,11 +160,11 @@ impl<'d, T: Instance> Adc<'d, T> {
161 adc, 160 adc,
162 sample_time: SampleTime::from_bits(0), 161 sample_time: SampleTime::from_bits(0),
163 }; 162 };
164 s.power_up(delay); 163 s.power_up();
165 s.configure_differential_inputs(); 164 s.configure_differential_inputs();
166 165
167 s.calibrate(); 166 s.calibrate();
168 delay.delay_us(1); 167 blocking_delay_us(1);
169 168
170 s.enable(); 169 s.enable();
171 s.configure(); 170 s.configure();
@@ -173,13 +172,13 @@ impl<'d, T: Instance> Adc<'d, T> {
173 s 172 s
174 } 173 }
175 174
176 fn power_up(&mut self, delay: &mut impl DelayUs<u16>) { 175 fn power_up(&mut self) {
177 T::regs().cr().modify(|reg| { 176 T::regs().cr().modify(|reg| {
178 reg.set_deeppwd(false); 177 reg.set_deeppwd(false);
179 reg.set_advregen(true); 178 reg.set_advregen(true);
180 }); 179 });
181 180
182 delay.delay_us(10); 181 blocking_delay_us(10);
183 } 182 }
184 183
185 fn configure_differential_inputs(&mut self) { 184 fn configure_differential_inputs(&mut self) {
diff --git a/examples/stm32f0/src/bin/adc.rs b/examples/stm32f0/src/bin/adc.rs
index c2fb143cd..a5a4186ea 100644
--- a/examples/stm32f0/src/bin/adc.rs
+++ b/examples/stm32f0/src/bin/adc.rs
@@ -6,7 +6,7 @@ use embassy_executor::Spawner;
6use embassy_stm32::adc::{Adc, SampleTime}; 6use embassy_stm32::adc::{Adc, SampleTime};
7use embassy_stm32::peripherals::ADC; 7use embassy_stm32::peripherals::ADC;
8use embassy_stm32::{adc, bind_interrupts}; 8use embassy_stm32::{adc, bind_interrupts};
9use embassy_time::{Delay, Timer}; 9use embassy_time::Timer;
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12bind_interrupts!(struct Irqs { 12bind_interrupts!(struct Irqs {
@@ -18,11 +18,11 @@ async fn main(_spawner: Spawner) {
18 let p = embassy_stm32::init(Default::default()); 18 let p = embassy_stm32::init(Default::default());
19 info!("Hello World!"); 19 info!("Hello World!");
20 20
21 let mut adc = Adc::new(p.ADC, Irqs, &mut Delay); 21 let mut adc = Adc::new(p.ADC, Irqs);
22 adc.set_sample_time(SampleTime::CYCLES71_5); 22 adc.set_sample_time(SampleTime::CYCLES71_5);
23 let mut pin = p.PA1; 23 let mut pin = p.PA1;
24 24
25 let mut vrefint = adc.enable_vref(&mut Delay); 25 let mut vrefint = adc.enable_vref();
26 let vrefint_sample = adc.read(&mut vrefint).await; 26 let vrefint_sample = adc.read(&mut vrefint).await;
27 let convert_to_millivolts = |sample| { 27 let convert_to_millivolts = |sample| {
28 // From https://www.st.com/resource/en/datasheet/stm32f031c6.pdf 28 // From https://www.st.com/resource/en/datasheet/stm32f031c6.pdf
diff --git a/examples/stm32f1/src/bin/adc.rs b/examples/stm32f1/src/bin/adc.rs
index 1440460a9..541ff159e 100644
--- a/examples/stm32f1/src/bin/adc.rs
+++ b/examples/stm32f1/src/bin/adc.rs
@@ -6,7 +6,7 @@ use embassy_executor::Spawner;
6use embassy_stm32::adc::Adc; 6use embassy_stm32::adc::Adc;
7use embassy_stm32::peripherals::ADC1; 7use embassy_stm32::peripherals::ADC1;
8use embassy_stm32::{adc, bind_interrupts}; 8use embassy_stm32::{adc, bind_interrupts};
9use embassy_time::{Delay, Timer}; 9use embassy_time::Timer;
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12bind_interrupts!(struct Irqs { 12bind_interrupts!(struct Irqs {
@@ -18,10 +18,10 @@ async fn main(_spawner: Spawner) {
18 let p = embassy_stm32::init(Default::default()); 18 let p = embassy_stm32::init(Default::default());
19 info!("Hello World!"); 19 info!("Hello World!");
20 20
21 let mut adc = Adc::new(p.ADC1, &mut Delay); 21 let mut adc = Adc::new(p.ADC1);
22 let mut pin = p.PB1; 22 let mut pin = p.PB1;
23 23
24 let mut vrefint = adc.enable_vref(&mut Delay); 24 let mut vrefint = adc.enable_vref();
25 let vrefint_sample = adc.read(&mut vrefint).await; 25 let vrefint_sample = adc.read(&mut vrefint).await;
26 let convert_to_millivolts = |sample| { 26 let convert_to_millivolts = |sample| {
27 // From http://www.st.com/resource/en/datasheet/CD00161566.pdf 27 // From http://www.st.com/resource/en/datasheet/CD00161566.pdf
diff --git a/examples/stm32f334/src/bin/adc.rs b/examples/stm32f334/src/bin/adc.rs
index bd126ce68..0528a9637 100644
--- a/examples/stm32f334/src/bin/adc.rs
+++ b/examples/stm32f334/src/bin/adc.rs
@@ -7,7 +7,7 @@ use embassy_stm32::adc::{Adc, SampleTime};
7use embassy_stm32::peripherals::ADC1; 7use embassy_stm32::peripherals::ADC1;
8use embassy_stm32::time::mhz; 8use embassy_stm32::time::mhz;
9use embassy_stm32::{adc, bind_interrupts, Config}; 9use embassy_stm32::{adc, bind_interrupts, Config};
10use embassy_time::{Delay, Timer}; 10use embassy_time::Timer;
11use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
12 12
13bind_interrupts!(struct Irqs { 13bind_interrupts!(struct Irqs {
@@ -38,13 +38,13 @@ async fn main(_spawner: Spawner) -> ! {
38 38
39 info!("create adc..."); 39 info!("create adc...");
40 40
41 let mut adc = Adc::new(p.ADC1, Irqs, &mut Delay); 41 let mut adc = Adc::new(p.ADC1, Irqs);
42 42
43 adc.set_sample_time(SampleTime::CYCLES601_5); 43 adc.set_sample_time(SampleTime::CYCLES601_5);
44 44
45 info!("enable vrefint..."); 45 info!("enable vrefint...");
46 46
47 let mut vrefint = adc.enable_vref(&mut Delay); 47 let mut vrefint = adc.enable_vref();
48 let mut temperature = adc.enable_temperature(); 48 let mut temperature = adc.enable_temperature();
49 49
50 loop { 50 loop {
diff --git a/examples/stm32f334/src/bin/opamp.rs b/examples/stm32f334/src/bin/opamp.rs
index a5c710aa2..2dbf1bdab 100644
--- a/examples/stm32f334/src/bin/opamp.rs
+++ b/examples/stm32f334/src/bin/opamp.rs
@@ -8,7 +8,7 @@ use embassy_stm32::opamp::{OpAmp, OpAmpGain};
8use embassy_stm32::peripherals::ADC2; 8use embassy_stm32::peripherals::ADC2;
9use embassy_stm32::time::mhz; 9use embassy_stm32::time::mhz;
10use embassy_stm32::{adc, bind_interrupts, Config}; 10use embassy_stm32::{adc, bind_interrupts, Config};
11use embassy_time::{Delay, Timer}; 11use embassy_time::Timer;
12use {defmt_rtt as _, panic_probe as _}; 12use {defmt_rtt as _, panic_probe as _};
13 13
14bind_interrupts!(struct Irqs { 14bind_interrupts!(struct Irqs {
@@ -39,14 +39,14 @@ async fn main(_spawner: Spawner) -> ! {
39 39
40 info!("create adc..."); 40 info!("create adc...");
41 41
42 let mut adc = Adc::new(p.ADC2, Irqs, &mut Delay); 42 let mut adc = Adc::new(p.ADC2, Irqs);
43 let mut opamp = OpAmp::new(p.OPAMP2); 43 let mut opamp = OpAmp::new(p.OPAMP2);
44 44
45 adc.set_sample_time(SampleTime::CYCLES601_5); 45 adc.set_sample_time(SampleTime::CYCLES601_5);
46 46
47 info!("enable vrefint..."); 47 info!("enable vrefint...");
48 48
49 let mut vrefint = adc.enable_vref(&mut Delay); 49 let mut vrefint = adc.enable_vref();
50 let mut temperature = adc.enable_temperature(); 50 let mut temperature = adc.enable_temperature();
51 let mut buffer = opamp.buffer_ext(&mut p.PA7, &mut p.PA6, OpAmpGain::Mul1); 51 let mut buffer = opamp.buffer_ext(&mut p.PA7, &mut p.PA6, OpAmpGain::Mul1);
52 52
diff --git a/examples/stm32f4/src/bin/adc.rs b/examples/stm32f4/src/bin/adc.rs
index 699c29c05..9473b7b7f 100644
--- a/examples/stm32f4/src/bin/adc.rs
+++ b/examples/stm32f4/src/bin/adc.rs
@@ -14,7 +14,7 @@ async fn main(_spawner: Spawner) {
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut delay = Delay; 16 let mut delay = Delay;
17 let mut adc = Adc::new(p.ADC1, &mut delay); 17 let mut adc = Adc::new(p.ADC1);
18 let mut pin = p.PC1; 18 let mut pin = p.PC1;
19 19
20 let mut vrefint = adc.enable_vrefint(); 20 let mut vrefint = adc.enable_vrefint();
diff --git a/examples/stm32f7/src/bin/adc.rs b/examples/stm32f7/src/bin/adc.rs
index f8d7b691f..641157960 100644
--- a/examples/stm32f7/src/bin/adc.rs
+++ b/examples/stm32f7/src/bin/adc.rs
@@ -4,7 +4,7 @@
4use defmt::*; 4use defmt::*;
5use embassy_executor::Spawner; 5use embassy_executor::Spawner;
6use embassy_stm32::adc::Adc; 6use embassy_stm32::adc::Adc;
7use embassy_time::{Delay, Timer}; 7use embassy_time::Timer;
8use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
9 9
10#[embassy_executor::main] 10#[embassy_executor::main]
@@ -12,7 +12,7 @@ async fn main(_spawner: Spawner) {
12 let p = embassy_stm32::init(Default::default()); 12 let p = embassy_stm32::init(Default::default());
13 info!("Hello World!"); 13 info!("Hello World!");
14 14
15 let mut adc = Adc::new(p.ADC1, &mut Delay); 15 let mut adc = Adc::new(p.ADC1);
16 let mut pin = p.PA3; 16 let mut pin = p.PA3;
17 17
18 let mut vrefint = adc.enable_vrefint(); 18 let mut vrefint = adc.enable_vrefint();
diff --git a/examples/stm32g4/src/bin/adc.rs b/examples/stm32g4/src/bin/adc.rs
index ae64bc8e4..68b54e406 100644
--- a/examples/stm32g4/src/bin/adc.rs
+++ b/examples/stm32g4/src/bin/adc.rs
@@ -5,7 +5,7 @@ use defmt::*;
5use embassy_executor::Spawner; 5use embassy_executor::Spawner;
6use embassy_stm32::adc::{Adc, SampleTime}; 6use embassy_stm32::adc::{Adc, SampleTime};
7use embassy_stm32::Config; 7use embassy_stm32::Config;
8use embassy_time::{Delay, Timer}; 8use embassy_time::Timer;
9use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
10 10
11#[embassy_executor::main] 11#[embassy_executor::main]
@@ -28,7 +28,7 @@ async fn main(_spawner: Spawner) {
28 let mut p = embassy_stm32::init(config); 28 let mut p = embassy_stm32::init(config);
29 info!("Hello World!"); 29 info!("Hello World!");
30 30
31 let mut adc = Adc::new(p.ADC2, &mut Delay); 31 let mut adc = Adc::new(p.ADC2);
32 adc.set_sample_time(SampleTime::CYCLES32_5); 32 adc.set_sample_time(SampleTime::CYCLES32_5);
33 33
34 loop { 34 loop {
diff --git a/examples/stm32h7/src/bin/adc.rs b/examples/stm32h7/src/bin/adc.rs
index a5594d10c..0009103d1 100644
--- a/examples/stm32h7/src/bin/adc.rs
+++ b/examples/stm32h7/src/bin/adc.rs
@@ -5,7 +5,7 @@ use defmt::*;
5use embassy_executor::Spawner; 5use embassy_executor::Spawner;
6use embassy_stm32::adc::{Adc, SampleTime}; 6use embassy_stm32::adc::{Adc, SampleTime};
7use embassy_stm32::Config; 7use embassy_stm32::Config;
8use embassy_time::{Delay, Timer}; 8use embassy_time::Timer;
9use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
10 10
11#[embassy_executor::main] 11#[embassy_executor::main]
@@ -44,7 +44,7 @@ async fn main(_spawner: Spawner) {
44 44
45 info!("Hello World!"); 45 info!("Hello World!");
46 46
47 let mut adc = Adc::new(p.ADC3, &mut Delay); 47 let mut adc = Adc::new(p.ADC3);
48 48
49 adc.set_sample_time(SampleTime::CYCLES32_5); 49 adc.set_sample_time(SampleTime::CYCLES32_5);
50 50
diff --git a/examples/stm32l0/src/bin/adc.rs b/examples/stm32l0/src/bin/adc.rs
index 97d41ca4b..507c3204a 100644
--- a/examples/stm32l0/src/bin/adc.rs
+++ b/examples/stm32l0/src/bin/adc.rs
@@ -6,7 +6,7 @@ use embassy_executor::Spawner;
6use embassy_stm32::adc::{Adc, SampleTime}; 6use embassy_stm32::adc::{Adc, SampleTime};
7use embassy_stm32::peripherals::ADC; 7use embassy_stm32::peripherals::ADC;
8use embassy_stm32::{adc, bind_interrupts}; 8use embassy_stm32::{adc, bind_interrupts};
9use embassy_time::{Delay, Timer}; 9use embassy_time::Timer;
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12bind_interrupts!(struct Irqs { 12bind_interrupts!(struct Irqs {
@@ -18,11 +18,11 @@ async fn main(_spawner: Spawner) {
18 let p = embassy_stm32::init(Default::default()); 18 let p = embassy_stm32::init(Default::default());
19 info!("Hello World!"); 19 info!("Hello World!");
20 20
21 let mut adc = Adc::new(p.ADC, Irqs, &mut Delay); 21 let mut adc = Adc::new(p.ADC, Irqs);
22 adc.set_sample_time(SampleTime::CYCLES79_5); 22 adc.set_sample_time(SampleTime::CYCLES79_5);
23 let mut pin = p.PA1; 23 let mut pin = p.PA1;
24 24
25 let mut vrefint = adc.enable_vref(&mut Delay); 25 let mut vrefint = adc.enable_vref();
26 let vrefint_sample = adc.read(&mut vrefint).await; 26 let vrefint_sample = adc.read(&mut vrefint).await;
27 let convert_to_millivolts = |sample| { 27 let convert_to_millivolts = |sample| {
28 // From https://www.st.com/resource/en/datasheet/stm32l051c6.pdf 28 // From https://www.st.com/resource/en/datasheet/stm32l051c6.pdf
diff --git a/examples/stm32l4/src/bin/adc.rs b/examples/stm32l4/src/bin/adc.rs
index a9f4604aa..7a89334e0 100644
--- a/examples/stm32l4/src/bin/adc.rs
+++ b/examples/stm32l4/src/bin/adc.rs
@@ -4,7 +4,6 @@
4use defmt::*; 4use defmt::*;
5use embassy_stm32::adc::{Adc, Resolution}; 5use embassy_stm32::adc::{Adc, Resolution};
6use embassy_stm32::Config; 6use embassy_stm32::Config;
7use embassy_time::Delay;
8use {defmt_rtt as _, panic_probe as _}; 7use {defmt_rtt as _, panic_probe as _};
9 8
10#[cortex_m_rt::entry] 9#[cortex_m_rt::entry]
@@ -18,7 +17,7 @@ fn main() -> ! {
18 } 17 }
19 let p = embassy_stm32::init(config); 18 let p = embassy_stm32::init(config);
20 19
21 let mut adc = Adc::new(p.ADC1, &mut Delay); 20 let mut adc = Adc::new(p.ADC1);
22 //adc.enable_vref(); 21 //adc.enable_vref();
23 adc.set_resolution(Resolution::BITS8); 22 adc.set_resolution(Resolution::BITS8);
24 let mut channel = p.PC0; 23 let mut channel = p.PC0;
diff --git a/tests/stm32/src/bin/dac.rs b/tests/stm32/src/bin/dac.rs
index 9d64742df..06501ab14 100644
--- a/tests/stm32/src/bin/dac.rs
+++ b/tests/stm32/src/bin/dac.rs
@@ -13,7 +13,7 @@ use embassy_executor::Spawner;
13use embassy_stm32::adc::Adc; 13use embassy_stm32::adc::Adc;
14use embassy_stm32::dac::{DacCh1, Value}; 14use embassy_stm32::dac::{DacCh1, Value};
15use embassy_stm32::dma::NoDma; 15use embassy_stm32::dma::NoDma;
16use embassy_time::{Delay, Timer}; 16use embassy_time::Timer;
17use micromath::F32Ext; 17use micromath::F32Ext;
18use {defmt_rtt as _, panic_probe as _}; 18use {defmt_rtt as _, panic_probe as _};
19 19
@@ -28,7 +28,7 @@ async fn main(_spawner: Spawner) {
28 let mut adc_pin = unsafe { core::ptr::read(&dac_pin) }; 28 let mut adc_pin = unsafe { core::ptr::read(&dac_pin) };
29 29
30 let mut dac = DacCh1::new(dac, NoDma, dac_pin); 30 let mut dac = DacCh1::new(dac, NoDma, dac_pin);
31 let mut adc = Adc::new(adc, &mut Delay); 31 let mut adc = Adc::new(adc);
32 32
33 #[cfg(feature = "stm32h755zi")] 33 #[cfg(feature = "stm32h755zi")]
34 let normalization_factor = 256; 34 let normalization_factor = 256;