STM32f3 - 多个ADC

时间:2016-01-16 14:00:11

标签: c stm32 stm32f4discovery adc

我有和STM32f3发现板,我试图使用4个ADC通道。这是我的阅读功能:

int ADC_read(int channel)
{
    ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_7Cycles5);
    ADC_StartConversion(ADC1);
    while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) != SET);
    return ADC_GetConversionValue(ADC1);    
}

一切顺利,直到突然程序卡在while循环中。有没有办法避免将ADC_FLAG_EOC置于循环中?或者只是让我的程序工作的其他方式?

2 个答案:

答案 0 :(得分:0)

据我所知,根据您使用的主板版本,您必须使用ADC_SoftwareStartConvCmdADC_StartConversion

所以也许你没有正确启动ADC转换,请试试这个:

ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_7Cycles5);

#if defined(SERIES_STM32F10x)
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
#elif defined(SERIES_STM32F30x)
  ADC_StartConversion(ADC1);
#else
  ADC_SoftwareStartConv(ADC1);
#endif

while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
return ADC_GetConversionValue(ADC1);

另外,不要忘记将引脚模式设置为输入:pinMode(pin, INPUT_ANALOG);

最后,take a look at this post用户遇到类似问题并通过重新启用外部触发器来解决问题:

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

答案 1 :(得分:0)

  • 不需要在每次调用时运行RegularChannelConfig,它可能没有时间来完成配置,并在启动时挂起。 在你开始之前等一下。

    • 查看示例

    • 为什么在您可以让DMA为您运行ADC并且只在需要时从内存中访问值(这些)时,以这种方式使用ADC。

STM-Cube正确地为您生成了大部分代码。