Script to get the temp sensor value for STM32L0

Dependencies:   mbed

Committer:
SimonNOWAK
Date:
Wed Feb 22 13:51:52 2017 +0000
Revision:
0:7adc363a814e
Project published for help. It is actually not working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SimonNOWAK 0:7adc363a814e 1 #include "mbed.h"
SimonNOWAK 0:7adc363a814e 2
SimonNOWAK 0:7adc363a814e 3 #define TEMP130_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FF8007E))
SimonNOWAK 0:7adc363a814e 4 #define TEMP30_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FF8007A))
SimonNOWAK 0:7adc363a814e 5 #define VDD_CALIB ((uint16_t) (300))
SimonNOWAK 0:7adc363a814e 6 #define VDD_APPLI ((uint16_t) (330))
SimonNOWAK 0:7adc363a814e 7 Serial pcMain(USBTX, USBRX);
SimonNOWAK 0:7adc363a814e 8
SimonNOWAK 0:7adc363a814e 9
SimonNOWAK 0:7adc363a814e 10 int32_t ComputeTemperature(uint32_t measure)
SimonNOWAK 0:7adc363a814e 11 {
SimonNOWAK 0:7adc363a814e 12 int32_t temperature;
SimonNOWAK 0:7adc363a814e 13 temperature = ((measure * VDD_APPLI / VDD_CALIB) - (int32_t)*TEMP30_CAL_ADDR );
SimonNOWAK 0:7adc363a814e 14 temperature = temperature *(int32_t)(130-30);
SimonNOWAK 0:7adc363a814e 15 temperature = temperature /(int32_t)(*TEMP130_CAL_ADDR -*TEMP30_CAL_ADDR);
SimonNOWAK 0:7adc363a814e 16 temperature = temperature + 30;
SimonNOWAK 0:7adc363a814e 17 return(temperature);
SimonNOWAK 0:7adc363a814e 18 }
SimonNOWAK 0:7adc363a814e 19
SimonNOWAK 0:7adc363a814e 20
SimonNOWAK 0:7adc363a814e 21 void ConfigTemperature(void){
SimonNOWAK 0:7adc363a814e 22 //Clock configuration
SimonNOWAK 0:7adc363a814e 23 RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
SimonNOWAK 0:7adc363a814e 24 ADC1->CFGR2 |= ADC_CFGR2_CKMODE;
SimonNOWAK 0:7adc363a814e 25
SimonNOWAK 0:7adc363a814e 26 //*******************//NEW PART BEGIN//******************//
SimonNOWAK 0:7adc363a814e 27 //ADC Calibration
SimonNOWAK 0:7adc363a814e 28 if ((ADC1->CR & ADC_CR_ADEN) != 0) /* (1) */
SimonNOWAK 0:7adc363a814e 29 {
SimonNOWAK 0:7adc363a814e 30 ADC1->CR &= (uint32_t)(~ADC_CR_ADEN); /* (2) */
SimonNOWAK 0:7adc363a814e 31 }
SimonNOWAK 0:7adc363a814e 32 ADC1->CR |= ADC_CR_ADCAL; /* (3) */
SimonNOWAK 0:7adc363a814e 33 while ((ADC1->ISR & ADC_ISR_EOCAL) == 0) /* (4) */
SimonNOWAK 0:7adc363a814e 34 {
SimonNOWAK 0:7adc363a814e 35 pcMain.printf("Calib");
SimonNOWAK 0:7adc363a814e 36 }
SimonNOWAK 0:7adc363a814e 37 ADC1->ISR |= ADC_ISR_EOCAL;
SimonNOWAK 0:7adc363a814e 38
SimonNOWAK 0:7adc363a814e 39 //Enable the ADC
SimonNOWAK 0:7adc363a814e 40 ADC1->ISR |= ADC_ISR_ADRDY; /* (1) */
SimonNOWAK 0:7adc363a814e 41 ADC1->CR |= ADC_CR_ADEN; /* (2) */
SimonNOWAK 0:7adc363a814e 42 if ((ADC1->CFGR1 & ADC_CFGR1_AUTOFF) == 0)
SimonNOWAK 0:7adc363a814e 43 {
SimonNOWAK 0:7adc363a814e 44 while ((ADC1->ISR & ADC_ISR_ADRDY) == 0) /* (3) */
SimonNOWAK 0:7adc363a814e 45 {
SimonNOWAK 0:7adc363a814e 46 pcMain.printf("Enable");
SimonNOWAK 0:7adc363a814e 47 }
SimonNOWAK 0:7adc363a814e 48 }
SimonNOWAK 0:7adc363a814e 49 //*******************//NEW PART END//******************//
SimonNOWAK 0:7adc363a814e 50
SimonNOWAK 0:7adc363a814e 51 //Configuration of the temp sensor
SimonNOWAK 0:7adc363a814e 52 ADC1->CFGR1 |= ADC_CFGR1_CONT; /* (2) */
SimonNOWAK 0:7adc363a814e 53 ADC1->CHSELR = ADC_CHSELR_CHSEL18; /* (3) */
SimonNOWAK 0:7adc363a814e 54 ADC1->SMPR |= ADC_SMPR_SMP; /* (4) */
SimonNOWAK 0:7adc363a814e 55 wait(1);
SimonNOWAK 0:7adc363a814e 56 ADC->CCR |= ADC_CCR_TSEN;
SimonNOWAK 0:7adc363a814e 57 wait(1);
SimonNOWAK 0:7adc363a814e 58 uint32_t measure = ADC1->DR;
SimonNOWAK 0:7adc363a814e 59 pcMain.printf("Measure %u\n\r", measure);
SimonNOWAK 0:7adc363a814e 60 pcMain.printf("The temperature value is %i\n\r",ComputeTemperature(measure));
SimonNOWAK 0:7adc363a814e 61
SimonNOWAK 0:7adc363a814e 62 }
SimonNOWAK 0:7adc363a814e 63
SimonNOWAK 0:7adc363a814e 64 /***************************************************************************//**
SimonNOWAK 0:7adc363a814e 65 * @fn main(void)
SimonNOWAK 0:7adc363a814e 66 * @brief Main of the project
SimonNOWAK 0:7adc363a814e 67 * @param void
SimonNOWAK 0:7adc363a814e 68 * @return int
SimonNOWAK 0:7adc363a814e 69 * @author Edson CALSIN, Francois DREVETON, Simon NOWAK
SimonNOWAK 0:7adc363a814e 70 *
SimonNOWAK 0:7adc363a814e 71 ******************************************************************************/
SimonNOWAK 0:7adc363a814e 72 int main(void)
SimonNOWAK 0:7adc363a814e 73 {
SimonNOWAK 0:7adc363a814e 74 ConfigTemperature();
SimonNOWAK 0:7adc363a814e 75 }