aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-stm32/src/adc/v3.rs22
-rw-r--r--examples/stm32l4/src/bin/adc.rs9
2 files changed, 13 insertions, 18 deletions
diff --git a/embassy-stm32/src/adc/v3.rs b/embassy-stm32/src/adc/v3.rs
index 36af6ec49..7480c4a36 100644
--- a/embassy-stm32/src/adc/v3.rs
+++ b/embassy-stm32/src/adc/v3.rs
@@ -1,6 +1,5 @@
1use crate::adc::{AdcPin, Instance}; 1use crate::adc::{AdcPin, Instance};
2use core::marker::PhantomData; 2use core::marker::PhantomData;
3use cortex_m::delay::Delay;
4use embassy::util::Unborrow; 3use embassy::util::Unborrow;
5use embassy_extras::unborrow; 4use embassy_extras::unborrow;
6use embedded_hal::blocking::delay::DelayUs; 5use embedded_hal::blocking::delay::DelayUs;
@@ -123,7 +122,7 @@ pub struct Adc<'d, T: Instance> {
123} 122}
124 123
125impl<'d, T: Instance> Adc<'d, T> { 124impl<'d, T: Instance> Adc<'d, T> {
126 pub fn new(_peri: impl Unborrow<Target = T> + 'd, mut delay: Delay) -> (Self, Delay) { 125 pub fn new(_peri: impl Unborrow<Target = T> + 'd, delay: &mut impl DelayUs<u32>) -> Self {
127 unborrow!(_peri); 126 unborrow!(_peri);
128 unsafe { 127 unsafe {
129 T::regs().cr().modify(|reg| { 128 T::regs().cr().modify(|reg| {
@@ -142,18 +141,15 @@ impl<'d, T: Instance> Adc<'d, T> {
142 141
143 delay.delay_us(1); 142 delay.delay_us(1);
144 143
145 ( 144 Self {
146 Self { 145 sample_time: Default::default(),
147 sample_time: Default::default(), 146 resolution: Resolution::default(),
148 resolution: Resolution::default(), 147 calibrated_vdda: VDDA_CALIB_MV,
149 calibrated_vdda: VDDA_CALIB_MV, 148 phantom: PhantomData,
150 phantom: PhantomData, 149 }
151 },
152 delay,
153 )
154 } 150 }
155 151
156 pub fn enable_vref(&self, mut delay: Delay) -> (Vref, Delay) { 152 pub fn enable_vref(&self, delay: &mut impl DelayUs<u32>) -> Vref {
157 unsafe { 153 unsafe {
158 T::common_regs().ccr().modify(|reg| { 154 T::common_regs().ccr().modify(|reg| {
159 reg.set_vrefen(true); 155 reg.set_vrefen(true);
@@ -166,7 +162,7 @@ impl<'d, T: Instance> Adc<'d, T> {
166 //cortex_m::asm::delay(20_000_000); 162 //cortex_m::asm::delay(20_000_000);
167 delay.delay_us(15); 163 delay.delay_us(15);
168 164
169 (Vref {}, delay) 165 Vref {}
170 } 166 }
171 167
172 pub fn enable_temperature(&self) -> Temperature { 168 pub fn enable_temperature(&self) -> Temperature {
diff --git a/examples/stm32l4/src/bin/adc.rs b/examples/stm32l4/src/bin/adc.rs
index a909e1bb2..a3c44d3c1 100644
--- a/examples/stm32l4/src/bin/adc.rs
+++ b/examples/stm32l4/src/bin/adc.rs
@@ -16,8 +16,8 @@ use cortex_m_rt::entry;
16use cortex_m::delay::Delay; 16use cortex_m::delay::Delay;
17use embassy_stm32::adc::{Adc, Resolution}; 17use embassy_stm32::adc::{Adc, Resolution};
18use stm32l4::stm32l4x5 as pac; 18use stm32l4::stm32l4x5 as pac;
19use stm32l4xx_hal::rcc::PllSource;
20use stm32l4xx_hal::prelude::*; 19use stm32l4xx_hal::prelude::*;
20use stm32l4xx_hal::rcc::PllSource;
21 21
22#[entry] 22#[entry]
23fn main() -> ! { 23fn main() -> ! {
@@ -29,12 +29,11 @@ fn main() -> ! {
29 let mut rcc = pp.RCC.constrain(); 29 let mut rcc = pp.RCC.constrain();
30 let mut pwr = pp.PWR.constrain(&mut rcc.apb1r1); 30 let mut pwr = pp.PWR.constrain(&mut rcc.apb1r1);
31 31
32 let delay = Delay::new(cp.SYST, 80_000_000); 32 let mut delay = Delay::new(cp.SYST, 80_000_000);
33 33
34 // TRY the other clock configuration 34 // TRY the other clock configuration
35 // let clocks = rcc.cfgr.freeze(&mut flash.acr); 35 // let clocks = rcc.cfgr.freeze(&mut flash.acr);
36 rcc 36 rcc.cfgr
37 .cfgr
38 .sysclk(80.mhz()) 37 .sysclk(80.mhz())
39 .pclk1(80.mhz()) 38 .pclk1(80.mhz())
40 .pclk2(80.mhz()) 39 .pclk2(80.mhz())
@@ -69,7 +68,7 @@ fn main() -> ! {
69 68
70 let p = embassy_stm32::init(Default::default()); 69 let p = embassy_stm32::init(Default::default());
71 70
72 let (mut adc, _) = Adc::new(p.ADC1, delay); 71 let mut adc = Adc::new(p.ADC1, &mut delay);
73 //adc.enable_vref(); 72 //adc.enable_vref();
74 adc.set_resolution(Resolution::EightBit); 73 adc.set_resolution(Resolution::EightBit);
75 let mut channel = p.PC0; 74 let mut channel = p.PC0;