fix(temp): correctly read actual VRef

This commit is contained in:
cscherr 2025-04-30 15:03:44 +02:00
parent a5c99f4037
commit 630b2b996e
Signed by: cscherrNT
GPG key ID: 8E2B45BC51A27EA7

View file

@ -19,18 +19,13 @@ fn main() -> ! {
let cp = cortex_m::Peripherals::take().unwrap(); let cp = cortex_m::Peripherals::take().unwrap();
let mut rcc = dp.RCC.freeze(Config::hsi16()); let mut rcc = dp.RCC.freeze(Config::hsi16());
let mut adc = dp.ADC.constrain(&mut rcc); let mut adc: Adc<_> = dp.ADC.constrain(&mut rcc);
let mut delay = cp.SYST.delay(rcc.clocks); let mut delay = cp.SYST.delay(rcc.clocks);
// manual says i need to calibrate but then boom
adc.set_sample_time(hal::adc::SampleTime::T_1_5);
delay.delay_ms(50_u16);
adc.calibrate().unwrap();
delay.delay_ms(5000_u16);
// NOTE: TSEN bit must be enabled for reading the temperature // NOTE: TSEN bit must be enabled for reading the temperature
VTemp.enable(&mut adc); VTemp.enable(&mut adc);
VRef.enable(&mut adc);
// reference temperatures from the chips readonly memory // reference temperatures from the chips readonly memory
// [Source](https://www.st.com/resource/en/datasheet/stm32l053r8.pdf), // [Source](https://www.st.com/resource/en/datasheet/stm32l053r8.pdf),
@ -53,7 +48,7 @@ fn main() -> ! {
let vref_actual: u16 = adc.read(&mut VRef).unwrap(); let vref_actual: u16 = adc.read(&mut VRef).unwrap();
let vref_factor = vref_cal as f32 / vref_actual as f32; let vref_factor = vref_cal as f32 / vref_actual as f32;
debug!( debug!(
"vref real={} register={} => factor={}", "vref actual={} calibration={} => factor={}",
vref_actual, vref_cal, vref_factor vref_actual, vref_cal, vref_factor
); );