AnsweredAssumed Answered

ADC with STM32F303VC

Question asked by tnut.huan on Aug 19, 2013
Latest reply on Aug 22, 2013 by baird.hal.001
I want read ADC of STM32F303VC then display status  on three LED (If ADC>1000 LED red bright,ADC<500 LED green bright and extant LED ogrange bright) programmed code below,but i don't find error.Thanks everyone!


#include "main.h"
__IO uint16_t  AD= 0,DA=0, ADC1ConvertedVoltage = 0, calibration_value = 0;
__IO uint32_t TimingDelay = 0;
ADC_InitTypeDef       ADC_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
GPIO_InitTypeDef      GPIO_InitStructure;
/////////////////////////////////////////////////////////////////////////////////////////
int main(void)
{
 
  RCC_ADCCLKConfig(RCC_ADC12PLLCLK_Div2);
  
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ADC12, ENABLE);
      
  /* Setup SysTick Timer for 1 µsec interrupts  */
  if (SysTick_Config(SystemCoreClock / 1000000))
  { 
    /* Capture error */ 
    while (1)
    {}
  }
     ////////////////LED///////////////////////////////////
     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE);
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
     ///////////////////////ADC///////////////////////////////
  /* GPIOC Periph clock enable */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  /* Configure ADC Channel2 as analog input (Pin 1 of Port A-PA1) */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  ADC_StructInit(&ADC_InitStructure);
     
////////////////////////////////////////////////////////////////////////////////////////////////
  /* Calibration procedure */  
  ADC_VoltageRegulatorCmd(ADC1, ENABLE);
  
  /* Insert delay equal to 10 µs */
  Delay(10);
  ADC_SelectCalibrationMode(ADC1, ADC_CalibrationMode_Single);
  ADC_StartCalibration(ADC1);
  
  while(ADC_GetCalibrationStatus(ADC1) != RESET );
  calibration_value = ADC_GetCalibrationValue(ADC1);
     
  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;                                                                    
  ADC_CommonInitStructure.ADC_Clock = ADC_Clock_AsynClkMode;                    
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;             
  ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_OneShot;                  
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = 0;          
  ADC_CommonInit(ADC1, &ADC_CommonInitStructure);
  
  ADC_InitStructure.ADC_ContinuousConvMode = ADC_ContinuousConvMode_Enable;
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; 
  ADC_InitStructure.ADC_ExternalTrigConvEvent = ADC_ExternalTrigConvEvent_0;         
  ADC_InitStructure.ADC_ExternalTrigEventEdge = ADC_ExternalTrigEventEdge_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_OverrunMode = ADC_OverrunMode_Disable;   
  ADC_InitStructure.ADC_AutoInjMode = ADC_AutoInjec_Disable;  
  ADC_InitStructure.ADC_NbrOfRegChannel = 1;
  ADC_Init(ADC1, &ADC_InitStructure);
   ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 1, ADC_SampleTime_4Cycles5);




//////////////////////////////////////////////////////////////////////////////////////////////  
  
  ADC_Cmd(ADC1, ENABLE);
  /* wait for ADRDY */
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_RDY));
  
  
  ADC_StartConversion(ADC1);   
  
  /* Infinite loop */
  while (1)
  {
    /* Test EOC flag */
    while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
          
    AD =ADC_GetConversionValue(ADC1);
 
    DA =(AD *3300)/0xFFF;
//////////////////////////////////////////////////////////////////////////////////// 
          while(AD>1000)
            { 
                    GPIO_SetBits(GPIOE,GPIO_Pin_9);
      }
          while(AD<500)
            {
                    GPIO_SetBits(GPIOE,GPIO_Pin_11);
      }
               GPIO_SetBits(GPIOE,GPIO_Pin_10);
  }
}




////////////////////////////////////////////////////////////////////////////////////
void Delay(__IO uint32_t nTime)

  TimingDelay = nTime;




  while(TimingDelay != 0);
}




and my project here:
http://www.mediafire.com/download/zbuszqh91kkah6f/ADC.7z

Outcomes