AD转换采样问题

2019-08-22 15:19发布

不管给什么模拟信号,stm32芯片采集的电压为什么只有两种,一个是0v,再就是3.299v,这是为什么,stm32坏了吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
xiaoxiaoniao
2019-08-22 21:07
本帖最后由 xiaoxiaoniao 于 2017-3-20 23:25 编辑
skeletonwei 发表于 2017-3-19 22:20
建议参考一个AD采样的程序,对照检查配置,顺便问一下你的参考电压是3.3v?

参考电压是3.3没有错,但是我用的是正点原子的库函数,都是正点原子验证过的应该没有错吧

void  Adc_Init(void)
{         
        ADC_InitTypeDef ADC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_AFIO|RCC_APB2Periph_ADC1        , ENABLE );     

        RCC_ADCCLKConfig(RCC_PCLK2_Div6);  
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;         
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);        

        ADC_DeInit(ADC1);
        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;     
        ADC_InitStructure.ADC_ScanConvMode = DISABLE;      
        ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;      
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;      
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;   
        ADC_InitStructure.ADC_NbrOfChannel = 1;      
        ADC_Init(ADC1, &ADC_InitStructure);      

  
        ADC_Cmd(ADC1, ENABLE);      
        
        ADC_ResetCalibration(ADC1);      
         
        while(ADC_GetResetCalibrationStatus(ADC1));      
        
        ADC_StartCalibration(ADC1);      

        while(ADC_GetCalibrationStatus(ADC1));      

//        ADC_SoftwareStartConvCmd(ADC1, ENABLE);              

}                                 

u16 Get_Adc(u8 ch)   
{
        
        ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );      
  
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);              
         
        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;
}         



一周热门 更多>