Skip to content

Commit 945c6a4

Browse files
authored
Support multiple ADCs. (#312)
* Support multiple ADCs. * Add `AdcCommon` struct for ensuring safe `ADC_COMMON` access. * Return `Option`s of ADC channels. * Always ensure minimum sample time for VREF. * Make minimum sample time more obvious. * Add a way to get calibrated VDDA for ADC.
1 parent 1c803af commit 945c6a4

File tree

4 files changed

+645
-360
lines changed

4 files changed

+645
-360
lines changed

examples/adc.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@ use panic_rtt_target as _;
55

66
use cortex_m_rt::entry;
77
use rtt_target::{rprint, rprintln};
8-
use stm32l4xx_hal::{adc::ADC, delay::Delay, pac, prelude::*};
8+
use stm32l4xx_hal::{
9+
adc::{Adc, AdcCommon},
10+
delay::Delay,
11+
pac,
12+
prelude::*,
13+
};
914

1015
#[entry]
1116
fn main() -> ! {
@@ -22,13 +27,8 @@ fn main() -> ! {
2227
let clocks = rcc.cfgr.freeze(&mut flash.acr, &mut pwr);
2328

2429
let mut delay = Delay::new(cp.SYST, clocks);
25-
let mut adc = ADC::new(
26-
dp.ADC1,
27-
dp.ADC_COMMON,
28-
&mut rcc.ahb2,
29-
&mut rcc.ccipr,
30-
&mut delay,
31-
);
30+
let adc_common = AdcCommon::new(dp.ADC_COMMON, &mut rcc.ahb2);
31+
let mut adc = Adc::adc1(dp.ADC1, adc_common, &mut rcc.ccipr, &mut delay);
3232

3333
let mut gpioc = dp.GPIOC.split(&mut rcc.ahb2);
3434
let mut a1 = gpioc.pc0.into_analog(&mut gpioc.moder, &mut gpioc.pupdr);

examples/adc_dma.rs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
use panic_rtt_target as _;
55
use rtt_target::{rprintln, rtt_init_print};
66
use stm32l4xx_hal::{
7-
adc::{DmaMode, SampleTime, Sequence, ADC},
7+
adc::{Adc, AdcCommon, DmaMode, SampleTime, Sequence},
88
delay::DelayCM,
99
dma::{dma1, RxDma, Transfer, W},
10+
pac::ADC1,
1011
prelude::*,
1112
};
1213

@@ -19,7 +20,7 @@ const APP: () = {
1920
// RTIC app is written in here!
2021

2122
struct Resources {
22-
transfer: Option<Transfer<W, &'static mut [u16; SEQUENCE_LEN], RxDma<ADC, dma1::C1>>>,
23+
transfer: Option<Transfer<W, &'static mut [u16; SEQUENCE_LEN], RxDma<Adc<ADC1>, dma1::C1>>>,
2324
}
2425

2526
#[init]
@@ -54,15 +55,10 @@ const APP: () = {
5455

5556
let mut delay = DelayCM::new(clocks);
5657

57-
let mut adc = ADC::new(
58-
pac.ADC1,
59-
pac.ADC_COMMON,
60-
&mut rcc.ahb2,
61-
&mut rcc.ccipr,
62-
&mut delay,
63-
);
58+
let adc_common = AdcCommon::new(pac.ADC_COMMON, &mut rcc.ahb2);
59+
let mut adc = Adc::adc1(pac.ADC1, adc_common, &mut rcc.ccipr, &mut delay);
6460

65-
let mut temp_pin = adc.enable_temperature(&mut delay);
61+
let mut temp_pin = adc.enable_temperature(&mut delay).unwrap();
6662

6763
let dma1_channel = dma_channels.1;
6864

0 commit comments

Comments
 (0)