diff options
| author | Dario Nieuwenhuis <[email protected]> | 2021-07-05 03:09:42 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2021-07-05 03:18:23 +0200 |
| commit | ecc151d4e28394ed2dcec466e86ea1880095f9aa (patch) | |
| tree | 76ec36764d49225112056f8e3ef38d40ad5f7cde | |
| parent | 7ebd4e3aa946a4b5aeea086959a38c94487470a3 (diff) | |
stm32/adc: simplify delay handling
| -rw-r--r-- | embassy-stm32/src/adc/v3.rs | 22 | ||||
| -rw-r--r-- | examples/stm32l4/src/bin/adc.rs | 9 |
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 @@ | |||
| 1 | use crate::adc::{AdcPin, Instance}; | 1 | use crate::adc::{AdcPin, Instance}; |
| 2 | use core::marker::PhantomData; | 2 | use core::marker::PhantomData; |
| 3 | use cortex_m::delay::Delay; | ||
| 4 | use embassy::util::Unborrow; | 3 | use embassy::util::Unborrow; |
| 5 | use embassy_extras::unborrow; | 4 | use embassy_extras::unborrow; |
| 6 | use embedded_hal::blocking::delay::DelayUs; | 5 | use embedded_hal::blocking::delay::DelayUs; |
| @@ -123,7 +122,7 @@ pub struct Adc<'d, T: Instance> { | |||
| 123 | } | 122 | } |
| 124 | 123 | ||
| 125 | impl<'d, T: Instance> Adc<'d, T> { | 124 | impl<'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; | |||
| 16 | use cortex_m::delay::Delay; | 16 | use cortex_m::delay::Delay; |
| 17 | use embassy_stm32::adc::{Adc, Resolution}; | 17 | use embassy_stm32::adc::{Adc, Resolution}; |
| 18 | use stm32l4::stm32l4x5 as pac; | 18 | use stm32l4::stm32l4x5 as pac; |
| 19 | use stm32l4xx_hal::rcc::PllSource; | ||
| 20 | use stm32l4xx_hal::prelude::*; | 19 | use stm32l4xx_hal::prelude::*; |
| 20 | use stm32l4xx_hal::rcc::PllSource; | ||
| 21 | 21 | ||
| 22 | #[entry] | 22 | #[entry] |
| 23 | fn main() -> ! { | 23 | fn 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; |
