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


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
OYT
1楼-- · 2019-07-21 05:32
今天对着配置语句一句一句的看,怎么都找不出错
翻了几遍库函数的手册,发现对于PA7,ADC1 和 ADC2是通用的,于是将上面程序中的ADC1全部替换成ADC2
然后程序正常,翻了翻数据手册,C8T6确实是有两个ADC的,然后用ADC1再试了试内部的温度传感器,一样没有数据

大概可以确定是ADC1在物理上损坏了,怎么损坏的,我自己也不清楚,下次换块板再试试
peng1554
2楼-- · 2019-07-21 09:36
用的是啥芯片?
OYT
3楼-- · 2019-07-21 13:41
peng1554 发表于 2019-3-15 17:52
用的是啥芯片?

STM32F103C8T6
peng1554
4楼-- · 2019-07-21 17:57
nashui_sx
5楼-- · 2019-07-21 19:26
 精彩回答 2  元偷偷看……

一周热门 更多>