AnsweredAssumed Answered

ADC1 and internal temperature sensor ?

Question asked by H.Rick on Jan 28, 2014
Latest reply on Jan 29, 2014 by H.Rick

Am I right on initializing ADC ?
It's running only one time and then freeze, I put it on forever loop, but stopping, never looping again, any wrong configuration here ?

      //read internal temperature sensor begin

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
        //ADC1 configuration
        //select independent conversion mode (single)
        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
        //We will convert single channel only
        ADC_InitStructure.ADC_ScanConvMode = DISABLE;
        //we will convert one time
        ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
        //select no external triggering
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
        //right 12-bit data alignment in ADC data register
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
        //single channel conversion
        ADC_InitStructure.ADC_NbrOfChannel = 1;
        //load structure values to control and status registers
        ADC_Init(ADC1, &ADC_InitStructure);
        //wake up temperature sensor
        //ADC1 channel16 configuration
        //we select 41.5 cycles conversion for channel16
        //and rank=1 which doesn't matter in single mode
        ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_41Cycles5);
        //Enable ADC1
        ADC_Cmd(ADC1, ENABLE);
        //Enable ADC1 reset calibration register
        //Check the end of ADC1 reset calibration register
        //Start ADC1 calibration
        //Check the end of ADC1 calibration
        //Start ADC1 Software Conversion
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
        //wait for conversion complete
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)){}
        //read ADC value
        //clear EOC flag
        ADC_ClearFlag(ADC1, ADC_FLAG_EOC);

        printf("\r\n ADC value: %d \r\n", AD_value);
        TemperatureC = (uint16_t)((V25-AD_value)/Avg_Slope+25);
        printf("Temperature: %d%cC\r\n", TemperatureC, 176);
      //read internal temperature sensor end