STM32 ADC 无法采样

2019-07-21 04:19发布

本帖最后由 OYT 于 2019-3-15 17:15 编辑

函数配置如下

void Adc_Init(void){
    ADC_InitTypeDef ADC_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;
   
    //使能 ADC1 通道时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1, ENABLE);
    //设置 ADC分频因子6,72/6=12M    ,ADC 最大时间不能超过 14M
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);
    //PA7 作为模拟通道输入引脚
    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;
    //模拟输入
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    //初始化 GPIOA.7
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    //复位ADC1
    ADC_DeInit(ADC1);     
    //ADC 独立模式
    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 数据右对齐
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    //顺序进行规则转换的ADC通道的数目
    ADC_InitStructure.ADC_NbrOfChannel = 1;  
    //根据指定的参数初始化外设 ADC1
    ADC_Init(ADC1, &ADC_InitStructure);
    //使能指定的 ADC1
    ADC_Cmd(ADC1, ENABLE);  
    //开启复位校准
    ADC_ResetCalibration(ADC1);  
    //等待复位校准结束
    while(ADC_GetResetCalibrationStatus(ADC1));
    //开启 AD 校准
    ADC_StartCalibration(ADC1);  
    //等待校准结束
    while(ADC_GetCalibrationStatus(ADC1));
}


u16 Get_Adc(u8 ch)
{

    u16 data=0;
    //设置指定 ADC 的规则组通道,设置它们的转化顺序和采样时间
    ADC_RegularChannelConfig(ADC1, ch,1,ADC_SampleTime_13Cycles5);
    //通道 1,规则采样顺序值为 1,采样时间为 239.5 周期
   
    //使能软件转换功能
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    //等待转换结束   
    while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
    //返回最近一次 ADC1 规则组的转换结果
    data=ADC_GetConversionValue(ADC1);
    return data;
}

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;
}

问题描述:
1.根据例程改编,使能ADC1 通道7
2.引脚有电压输入,另外通过仿真看寄存器DR,数值一直为0,导致采样数据一直为0


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。