[英]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_SoftwareStartConvCmd
或ADC_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.