STM32F031ADC数据错位,三个通道的值换来换去

为什么ADC三个通道的值一直在换来换去啊,代码如下

int main()  
{  
    TIM3_Init(999, 79);  
    ADC1_Init();;  
  
while (1)  
    {  
        switch (event)  
        {  
        case 0 :  
        {  
             ADC_StartOfConversion(ADC1);  
            ADC_ChannelConfig(ADC1, ADC_Channel_6, ADC_SampleTime_55_5Cycles);  
        }  
        break;  
        case 1 :  
        {  
             data1 = ADC_GetConversionValue(ADC1);  
        }  
        break;  
        case 2 :  
        {  
             ADC_StartOfConversion(ADC1);  
            ADC_ChannelConfig(ADC1, ADC_Channel_7, ADC_SampleTime_55_5Cycles);  
        }  
        break;  
        case 3 :  
        {  
             data2 = ADC_GetConversionValue(ADC1);  
        }  
        break;  
        case 4 :  
        {  
            ADC_StartOfConversion(ADC1);  
            ADC_ChannelConfig(ADC1, ADC_Channel_9, ADC_SampleTime_55_5Cycles);  
        }  
        break;  
        case 5 :  
        {  
             data3 = ADC_GetConversionValue(ADC1);  
        }  
        break;  
        case 6 :  
        {  
  
        }  
        break;  
        case 7 :  
        {  
   
          value1 = (float)data1*3.3/1023;  
          value2 = (float)data2*3.3/1023;   
              value3 = (float)data3*3.3/1023;  
                      
            event = 0;  
        }  
        break;  
        }  
    }  
}  
  
void TIM3_IRQHandler(void)  
{  
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)  
    {  
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  
        event++;  
    }  
} 

在用STM32F407的时候完全没有问题,一样的代码,一样的功能。

有没有同学能发现问题,指教指教。

ADC三个通道的值在不断变化可能是因为没有给定适当的延时,以等待ADC完成转换。你可以尝试在每个转换后添加一个小的延时来解决这个问题。例如,可以在 ADC_GetConversionValue() 后添加一个 Delay() 函数来等待转换完成。 另外,请确保 ADC 的采样时间和时钟配置正确。