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

Configuring ADC in STM32F3

Hi, I'm trying to use an ADC in my STM32F3 Discovery. I've prepared a code as follows

#include "stm32f30x.h"
#include "stm32f30x_rcc.h"
#include "stm32f30x_adc.h"
#include <stm32f30x_gpio.h>

#define LED (GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15)

uint16_t convertedValue= 0;

void delay_ms (int time)
{
    int i;
    for (i = 0; i < time * 4000; i++) {}
}

void Configure_ADC(void)
{
        RCC_ADCCLKConfig(RCC_ADC12PLLCLK_Div2);
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ADC12,ENABLE);
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_StructInit(&GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_1;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        ADC_DeInit(ADC1);
        ADC_InitTypeDef ADC_InitStructure;
        ADC_InitStructure.ADC_Resolution = ADC_Resolution_10b;
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
        ADC_InitStructure.ADC_ExternalTrigConvEvent = ADC_ExternalTrigConvEvent_0;
        ADC_InitStructure.ADC_ExternalTrigEventEdge = ADC_ExternalTrigEventEdge_None;
        ADC_InitStructure.ADC_NbrOfRegChannel = 1;
        ADC_InitStructure.ADC_ContinuousConvMode = ADC_ContinuousConvMode_Enable;
        ADC_Init(ADC1,&ADC_InitStructure);
        ADC_RegularChannelConfig(ADC1,ADC_Channel_2, 1, ADC_SampleTime_7Cycles5);
        ADC_Cmd(ADC1, ENABLE);
}

uint16_t Read_ADC()
{
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_RDY));
        ADC_StartConversion(ADC1);
        while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);
        return ADC_GetConversionValue(ADC1);
}

int main()
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE);
        GPIO_StructInit(&GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_Pin  = LED;
        GPIO_Init(GPIOE, &GPIO_InitStructure);
        uint32_t led = 0;


        while(1)
          {

                convertedValue = Read_ADC();//Read the ADC converted value
                GPIO_SetBits(GPIOE, 1 << led); //turn on a diode
                delay_ms(150); // wait
                GPIO_ResetBits(GPIOE, 1 << led); //turn off a diode
                if (++led >= 16)
                  {
                       led = 8;
                  }
          }
}

The problem is that the ADC doesn't work. A program stops on Read_ADC() function in the main loop. Have I missed something?