zoukankan      html  css  js  c++  java
  • 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官方库的方式与直接操作寄存器的方式理论上效果应该是一致的,但实测发现,利用直接操作寄存器的方式仍存在干扰。这个问题未能发现原因。

  • 相关阅读:
    9IDEA常见的快捷键
    8Java类与对象
    5Java运算符
    10Java面向对象中级
    3Java基础
    4Java基础变量
    6Java控制结构
    7Java数组
    11Java面向对象高级
    缓存事件过期监听机制
  • 原文地址:https://www.cnblogs.com/Si-Mao/p/4355333.html
Copyright © 2011-2022 走看看