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官方庫的方式與直接操作寄存器的方式理論上效果應該是一致的,但實測發現,利用直接操作寄存器的方式仍存在干擾。這個問題未能發現原因。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM