STM32的AD通道干扰问题

  今天调试STM32F103的ADC,使用ADC1单次转换模式进行两通道AD采样,发现两路通道存在烦扰问题。相关AD操作代码如下:

void adc_start_convert(uint8_t ch)
{
    ADC1->SMPR2 = (ADC1->SMPR2 & 0XFFFFFFF8) | 7;
    ADC1->SQR3 = (ADC1->SQR3 & 0XFFFFFFE0) | ch;
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}


uint8_t adc_is_convert_finish(void)
{
    if((ADC1->SR&0x02) == 0)
        return 0;
    else
        return 1;
}

uint16_t adc_get_value(void)
{
    return ADC1 -> DR;
}

  进过多次调试,最终的解决方式如下:

  1.修改ADC时钟频率

RCC_ADCCLKConfig(RCC_PCLK2_Div8);

  2.修改ADC启动转换函数

void adc_start_convert(uint8_t ch)
{
    ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_13Cycles5);
//     ADC1->SMPR2 = (ADC1->SMPR2 & 0XFFFFFFF8) | 7;
//     ADC1->SQR3 = (ADC1->SQR3 & 0XFFFFFFE0) | ch;
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}

  对于解决步骤(2),利用STM32官方库的方式与直接操作寄存器的方式理论上效果应该是一致的,但实测发现,利用直接操作寄存器的方式仍存在干扰。这个问题未能发现原因。

原文地址:https://www.cnblogs.com/Si-Mao/p/4355333.html