gavinliang 发表于 2017-4-10 14:55:14

uint16_t Get_ADCCH_Value(ADC1_Channel_TypeDef ADC_Channel)
{
    uint16_t GetADC_Value = 0;
    FlagStatus flag_status;
    //ADC1_DeInit();
    /*
            * ADC1_CONVERSIONMODE_CONTINUOUS = 转换模式:连续转换ADC1_CONVERSIONMODE_SINGLE= 单次转换
              ADC1_CHANNEL_2 = ADC通道2
                    ADC1_PRESSEL_FCPU_D2 = 时钟分频器 fADC1= fMASTER/2
                    ADC1_EXTTRIG_TIM, DISABLE = 启用或者关闭外部触发转换事件:内部定时器1的TRG事件--关闭
                    ADC1_ALIGN_LEFT = 数据对齐方向:左对齐
                    ADC1_SCHMITTTRIG_CHANNEL0, DISABLE = 启用或者关闭指定通道的施密特触发器:通道2--关闭
                                                                                                                                                                   (ADC1_SCHMITTTRIG_ALL, DISABLE = 所有通道--关闭)
            */
    ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC_Channel, ADC1_PRESSEL_FCPU_D2, \
            ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE);

    ADC1_Cmd(ENABLE);
    ADC1_StartConversion();
    delay_us(10);
    flag_status = ADC1_GetFlagStatus(ADC1_FLAG_EOC);
    if (flag_status != RESET) // SET or RESET
    {
      GetADC_Value = ADC1_GetConversionValue(); //返回ADC结果
    }
    return GetADC_Value;
}

//读AD值
void Read_Temperature_TEST()
{       
        Conversion_Value = Get_ADCCH_Value(ADC1_CHANNEL_3); //TEMP_AD_TEST_ValuePD2
TEMP_AD_TEST_Value = Conversion_Value;

        Conversion_Value = Get_ADCCH_Value(ADC1_CHANNEL_4); //TEMP_AD_ValuePD3
TEMP_AD_Value = Conversion_Value;

}


在主循环里面,跑Read_Temperature_TEST()。读出来的值是 TEMP_AD_TEST_Value = 464, TEMP_AD_Value = 1000证明第三通道读出来是正常的,后面通道的受到第三通道的在通道切换时的相互影响,所以后面的第4通道读出来的值就不正常。但是,如果单独只读一个通道,另一个通道不读,这两个通道分别读出来的AD值都是正常的。。太不可思议了,还有这种情况出现 ,希望引起大家的注意。
   希望有解决办法的高人出来指点一下。

sssdd 发表于 2017-4-13 13:39:05

不懂stm8有DMA。。。
不懂stm8有两个ADC。。
不懂两只ADC同时开?有这种必要?
stm32 的双ADC有要求,采样时间不能重叠。估计你就是重叠了。
时钟频率当然是越慢越好。采样时间当然也是越长越好。

lvkui2017 发表于 2018-5-28 13:52:01

要多次采集求平均值
页: 1 [2]
查看完整版本: STM8 多通道ADC采集故障,望指点