#![no_main]
#![no_std]
#[macro_use]
mod utilities;
use cortex_m_rt::entry;
use log::info;
use stm32h7xx_hal::{adc, delay::Delay, pac, prelude::*};
#[entry]
fn main() -> ! {
utilities::logger::init();
let cp = cortex_m::Peripherals::take().unwrap();
let dp = pac::Peripherals::take().unwrap();
info!("Setup PWR... ");
let pwr = dp.PWR.constrain();
let pwrcfg = example_power!(pwr).freeze();
info!("Setup RCC... ");
let rcc = dp.RCC.constrain();
let ccdr = rcc
.sys_ck(100.MHz())
.pll2_p_ck(4.MHz()) .freeze(pwrcfg, &dp.SYSCFG);
info!("");
info!("stm32h7xx-hal example - ADC1 and ADC2");
info!("");
let mut delay = Delay::new(cp.SYST, ccdr.clocks);
let (adc1, adc2) = adc::adc12(
dp.ADC1,
dp.ADC2,
4.MHz(),
&mut delay,
ccdr.peripheral.ADC12,
&ccdr.clocks,
);
let mut adc1 = adc1.enable();
adc1.set_resolution(adc::Resolution::SixteenBit);
let mut adc2 = adc2.enable();
adc2.set_resolution(adc::Resolution::SixteenBit);
let gpioc = dp.GPIOC.split(ccdr.peripheral.GPIOC);
let mut channel_pc2 = gpioc.pc2.into_analog(); let mut channel_pc3 = gpioc.pc3.into_analog();
loop {
let data_pc2: u32 = adc1.read(&mut channel_pc2).unwrap();
let data_pc3: u32 = adc2.read(&mut channel_pc3).unwrap();
info!("ADC readings: {} {}", data_pc2, data_pc3);
}
}