commit
						a47fb42962
					
				@ -7,8 +7,7 @@ use crate::Peripheral;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
pub const VDDA_CALIB_MV: u32 = 3300;
 | 
					pub const VDDA_CALIB_MV: u32 = 3300;
 | 
				
			||||||
pub const ADC_MAX: u32 = (1 << 12) - 1;
 | 
					pub const ADC_MAX: u32 = (1 << 12) - 1;
 | 
				
			||||||
// No calibration data for F103, voltage should be 1.2v
 | 
					pub const VREF_INT: u32 = 1230;
 | 
				
			||||||
pub const VREF_INT: u32 = 1200;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct Vref;
 | 
					pub struct Vref;
 | 
				
			||||||
impl<T: Instance> AdcPin<T> for Vref {}
 | 
					impl<T: Instance> AdcPin<T> for Vref {}
 | 
				
			||||||
@ -102,16 +101,14 @@ impl<'d, T: Instance> Adc<'d, T> {
 | 
				
			|||||||
        while !T::regs().isr().read().eoc() && !T::regs().isr().read().eos() {}
 | 
					        while !T::regs().isr().read().eoc() && !T::regs().isr().read().eos() {}
 | 
				
			||||||
        T::regs().isr().write(|_| {});
 | 
					        T::regs().isr().write(|_| {});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        T::regs().dr().read().0 as u16
 | 
					        T::regs().dr().read().rdata()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn read(&mut self, pin: &mut impl AdcPin<T>) -> u16 {
 | 
					    pub fn read(&mut self, pin: &mut impl AdcPin<T>) -> u16 {
 | 
				
			||||||
        // pin.set_as_analog();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Self::set_channel_sample_time(pin.channel(), self.sample_time);
 | 
					        Self::set_channel_sample_time(pin.channel(), self.sample_time);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Configure the channel to sample
 | 
					        // Configure the channel to sample
 | 
				
			||||||
        T::regs().sqr3().write(|w| w.set_sq(0, pin.channel()));
 | 
					        T::regs().sqr1().write(|w| w.set_sq(0, pin.channel()));
 | 
				
			||||||
        self.convert()
 | 
					        self.convert()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use defmt::info;
 | 
					use defmt::info;
 | 
				
			||||||
use embassy_executor::Spawner;
 | 
					use embassy_executor::Spawner;
 | 
				
			||||||
use embassy_stm32::adc::Adc;
 | 
					use embassy_stm32::adc::{Adc, VREF_INT};
 | 
				
			||||||
use embassy_stm32::rcc::{ADCClock, ADCPrescaler};
 | 
					use embassy_stm32::rcc::{ADCClock, ADCPrescaler};
 | 
				
			||||||
use embassy_stm32::time::Hertz;
 | 
					use embassy_stm32::time::Hertz;
 | 
				
			||||||
use embassy_stm32::Config;
 | 
					use embassy_stm32::Config;
 | 
				
			||||||
@ -20,15 +20,28 @@ async fn main(_spawner: Spawner) -> ! {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    let mut p = embassy_stm32::init(config);
 | 
					    let mut p = embassy_stm32::init(config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    info!("create adc...");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let mut adc = Adc::new(p.ADC1, &mut Delay);
 | 
					    let mut adc = Adc::new(p.ADC1, &mut Delay);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let mut vrefint = adc.enable_vref(&mut Delay);
 | 
					    info!("enable vrefint...");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let _vref = adc.read(&mut vrefint);
 | 
					    let mut vrefint = adc.enable_vref(&mut Delay);
 | 
				
			||||||
    let _pin = adc.read(&mut p.PA0);
 | 
					    let mut temperature = adc.enable_temperature();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    loop {
 | 
					    loop {
 | 
				
			||||||
        info!("Hello World!");
 | 
					        let vref = adc.read(&mut vrefint);
 | 
				
			||||||
 | 
					        info!("read vref: {}", vref);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let temp = adc.read(&mut temperature);
 | 
				
			||||||
 | 
					        info!("read temperature: {}", temp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let pin = adc.read(&mut p.PA0);
 | 
				
			||||||
 | 
					        info!("read pin: {}", pin);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let pin_mv = pin as u32 * VREF_INT as u32 / vref as u32;
 | 
				
			||||||
 | 
					        info!("computed pin mv: {}", pin_mv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Timer::after(Duration::from_secs(1)).await;
 | 
					        Timer::after(Duration::from_secs(1)).await;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user