关于用定时器触发ADC采集外部电压的问题,请看一下我的问题

2019-07-20 14:40发布

//time2初始化
void Tim2Config(void)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
    //´开时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
   
    TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
    TIM_TimeBaseInitStruct.TIM_Prescaler=42-1;
    TIM_TimeBaseInitStruct.TIM_Period=44;
    TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
    //选择输出触发方式 ,这里选择了数据更新触发
    TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_Update);
    TIM_Cmd(TIM2,ENABLE); //使能
}
//初始化ADC
void Adc_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    ADC_CommonInitTypeDef ADC_CommonInitStruct;
    ADC_InitTypeDef ADC_InitStruct;
   
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);  //
   
   
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;  
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AN;
    GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOA,&GPIO_InitStruct);
   
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);
   

    ADC_CommonInitStruct.ADC_Mode=ADC_Mode_Independent;
    ADC_CommonInitStruct.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_5Cycles
    ADC_CommonInitStruct.ADC_DMAAccessMode=ADC_DMAAccessMode_Disabled;
    ADC_CommonInitStruct.ADC_Prescaler=ADC_Prescaler_Div4;
    ADC_CommonInit(&ADC_CommonInitStruct);
  

    ADC_InitStruct.ADC_Resolution=ADC_Resolution_12b;
    ADC_InitStruct.ADC_ScanConvMode=DISABLE;
    ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;
    ADC_InitStruct.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_Rising;
    ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T2_TRGO
    ADC_InitStruct.ADC_NbrOfConversion=1;
    ADC_Init(ADC1,&ADC_InitStruct);
   
    ADC_Cmd(ADC1,ENABLE);
}

u16 Get_Adc(u8 ch)
{

    ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_480Cycles); //µÚÈý¸ö²ÎÊýΪ¹æÔò×é²ÉÑùµÚÒ»¸ö
    //ADC_SoftwareStartConv(ADC1);//ʹÄÜÖ¸¶¨µÄADC1µÄÈí¼þת»»Æô¶¯¹¦ÄÜ
    ADC_ExternalTrigInjectedConvConfig(ADC1,ADC_ExternalTrigInjecConv_T2_TRGO);
    ADC_ExternalTrigInjectedConvEdgeConfig(ADC1,ADC_ExternalTrigInjecConvEdge_Rising);
   
    while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
    return ADC_GetConversionValue(ADC1);
}


u16 Get_Adc_Average(u8 ch,u8 times)
{
    u32 temp_val=0;
    u8 t;
    for(t=0;t<times;t++)
    {
        temp_val+=Get_Adc(ch);
        delay_ms(5);
    }
    return temp_val/times;
}



大家帮忙看一下问题在哪里,定时器触发ADC采集,现在采集不到电压。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。