This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

internal regulator for ADC of stm32l152

Hi

Can we use internal regulator for ref voltage of ADC of STM32L152? if you have experienced it please tel me how to do?

Parents
  • I am using

     ADC_TempSensorVrefintCmd(ENABLE);
    


    but it works with external vref
    my code is:

    void ADC_Init(void)
    {
      ADC_InitTypeDef ADC_InitStructure;
    
    /* Enable ADC clock */
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    
    /* de-initialize ADC */
      ADC_DeInit(ADC1);
    
    /*  ADC configured as follow:
      - NbrOfChannel = 1 - ADC_Channel_9
      - Mode = Single ConversionMode(ContinuousConvMode disabled)
      - Resolution = 12Bits
      - Prescaler = /1
      - sampling time 192 */
    
        /* ADC Configuration */
      ADC_StructInit(&ADC_InitStructure);
      ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
      ADC_InitStructure.ADC_ScanConvMode = ENABLE;
      ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
      ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
      ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
      ADC_InitStructure.ADC_NbrOfConversion = 1;
      ADC_Init(ADC1, &ADC_InitStructure);
    
      /* ADC1 regular channel9 configuration */
      ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_192Cycles);
      ADC_DelaySelectionConfig(ADC1, ADC_DelayLength_Freeze);
    
      ADC_PowerDownCmd(ADC1, ADC_PowerDown_Idle_Delay, ENABLE);
    
      /* Enable ADC1 */
      ADC_Cmd(ADC1, ENABLE);
    
      /* Wait until ADC1 ON status */
      while (ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET)
      {
      }
    
    }
    

    uint16_t ADC_Supply(void)
    {
      uint8_t i;
      uint16_t res;
    
    
    /* Initializes ADC */ ADC_Init();
    ADC_TempSensorVrefintCmd(ENABLE);
    /* ADC1 regular channel 9 for VREF configuration */ ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_192Cycles);
    /* initialize result */ res = 0; for(i=4; i>0; i--) { /* start ADC convertion by software */ ADC_SoftwareStartConv(ADC1);
    /* wait until end-of-covertion */ while( ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0 ); /* read ADC convertion result */ res += ADC_GetConversionValue(ADC1); }
    /* de-initialize ADC */ ADC_TempSensorVrefintCmd(DISABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, DISABLE);
    return (res>>2); }

Reply
  • I am using

     ADC_TempSensorVrefintCmd(ENABLE);
    


    but it works with external vref
    my code is:

    void ADC_Init(void)
    {
      ADC_InitTypeDef ADC_InitStructure;
    
    /* Enable ADC clock */
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    
    /* de-initialize ADC */
      ADC_DeInit(ADC1);
    
    /*  ADC configured as follow:
      - NbrOfChannel = 1 - ADC_Channel_9
      - Mode = Single ConversionMode(ContinuousConvMode disabled)
      - Resolution = 12Bits
      - Prescaler = /1
      - sampling time 192 */
    
        /* ADC Configuration */
      ADC_StructInit(&ADC_InitStructure);
      ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
      ADC_InitStructure.ADC_ScanConvMode = ENABLE;
      ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
      ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
      ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
      ADC_InitStructure.ADC_NbrOfConversion = 1;
      ADC_Init(ADC1, &ADC_InitStructure);
    
      /* ADC1 regular channel9 configuration */
      ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_192Cycles);
      ADC_DelaySelectionConfig(ADC1, ADC_DelayLength_Freeze);
    
      ADC_PowerDownCmd(ADC1, ADC_PowerDown_Idle_Delay, ENABLE);
    
      /* Enable ADC1 */
      ADC_Cmd(ADC1, ENABLE);
    
      /* Wait until ADC1 ON status */
      while (ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET)
      {
      }
    
    }
    

    uint16_t ADC_Supply(void)
    {
      uint8_t i;
      uint16_t res;
    
    
    /* Initializes ADC */ ADC_Init();
    ADC_TempSensorVrefintCmd(ENABLE);
    /* ADC1 regular channel 9 for VREF configuration */ ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_192Cycles);
    /* initialize result */ res = 0; for(i=4; i>0; i--) { /* start ADC convertion by software */ ADC_SoftwareStartConv(ADC1);
    /* wait until end-of-covertion */ while( ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0 ); /* read ADC convertion result */ res += ADC_GetConversionValue(ADC1); }
    /* de-initialize ADC */ ADC_TempSensorVrefintCmd(DISABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, DISABLE);
    return (res>>2); }

Children