@@ -374,6 +374,27 @@ measure_power_dbm(void)
374
374
measured_power_dbm = dbm ;
375
375
}
376
376
377
+ uint16_t adc_single_read (ADC_TypeDef * adc , uint32_t chsel )
378
+ {
379
+ /* ADC setup */
380
+ adc -> ISR = adc -> ISR ;
381
+ adc -> IER = 0 ;
382
+ adc -> SMPR1 = ADC_SMPR1_SMP0_2 ; // 19.5 cycle
383
+ adc -> CFGR = 0 ; // 12bit
384
+ adc -> SQR1 = chsel << 6 ;
385
+
386
+ /* ADC conversion start.*/
387
+ adc -> CR |= ADC_CR_ADSTART ;
388
+ while (adc -> CR & ADC_CR_ADSTART )
389
+ ;
390
+
391
+ return adc -> DR ;
392
+ }
393
+
394
+ #define ADC1_CHANNEL_TEMP 16
395
+ #define ADC1_CHANNEL_BAT 17
396
+ #define ADC1_CHANNEL_VREF 18
397
+
377
398
static void cmd_stat (BaseSequentialStream * chp , int argc , char * argv [])
378
399
{
379
400
(void )argc ;
@@ -394,6 +415,10 @@ static void cmd_stat(BaseSequentialStream *chp, int argc, char *argv[])
394
415
chprintf (chp , "fm stereo: %d %d\r\n" , stereo_separate_state .sdi , stereo_separate_state .sdq );
395
416
chprintf (chp , " corr: %d %d %d\r\n" , stereo_separate_state .corr , stereo_separate_state .corr_ave , stereo_separate_state .corr_std );
396
417
chprintf (chp , " int: %d\r\n" , stereo_separate_state .integrator );
418
+
419
+ chprintf (chp , "temp: %d\r\n" , adc_single_read (ADC1 , ADC1_CHANNEL_TEMP ));
420
+ chprintf (chp , "bat: %d\r\n" , adc_single_read (ADC1 , ADC1_CHANNEL_BAT ));
421
+ chprintf (chp , "vref: %d\r\n" , adc_single_read (ADC1 , ADC1_CHANNEL_VREF ));
397
422
398
423
#if 0
399
424
p = & tx_buffer [0 ];
@@ -831,6 +856,15 @@ int __attribute__((noreturn)) main(void)
831
856
dac1cfg1 .init = config .dac_value ;
832
857
dacStart (& DACD1 , & dac1cfg1 );
833
858
859
+ /*
860
+ * Activates the ADC1 driver and the temperature sensor.
861
+ */
862
+ adcStart (& ADCD1 , NULL );
863
+ adcSTM32EnableTS (& ADCD1 );
864
+ adcSTM32EnableVBAT (& ADCD1 );
865
+ adcSTM32EnableVREF (& ADCD1 );
866
+
867
+
834
868
i2cStart (& I2CD1 , & i2ccfg );
835
869
/*
836
870
* Initializes a serial-over-USB CDC driver.
0 commit comments