繁体   English   中英

STM32f3-多个ADC

[英]STM32f3 - Multiple 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置于循环中? 或者只是其他方式来使我的程序正常工作?

据我了解,根据所使用的板卡版本,您必须使用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);

最后, 看看这篇文章 ,其中用户遇到了与您类似的问题,并通过重新启用外部触发器来解决了该问题:

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  • RegularChannelConfig不需要在每个调用上运行,它可能没有时间完成配置,并且在启动时挂起。 开始之前请稍候。

    • 看例子

    • 当您可以使DMA为您运行ADC并在需要时简单地从内存中访问值时,为什么要以这种方式使用ADC。

STM-Cube可以正确为您生成大部分代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM