![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
fork
Fork of STM32L0_TempSensor by
main.cpp@0:7adc363a814e, 2017-02-22 (annotated)
- Committer:
- SimonNOWAK
- Date:
- Wed Feb 22 13:51:52 2017 +0000
- Revision:
- 0:7adc363a814e
- Child:
- 1:d208073b902e
Project published for help. It is actually not working
Who changed what in which revision?
User | Revision | Line number | New 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 | } |