我有和STM32f3发现板,我正在尝试使用4个模数转换器通道。这是我的read函数:
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放入循环?或者只是让我的程序工作的其他方式?
发布于 2016-01-16 22:14:24
据我所知,根据您使用的电路板的版本,您必须使用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);另外,别忘了将pins模式设置为input with:pinMode(pin, INPUT_ANALOG);
最后,take a look at this post中的用户遇到了与您类似的问题,并通过使用以下命令重新启用外部触发器来解决此问题:
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;发布于 2016-01-28 20:37:26
- look at the examples
- why use the ADC this way when you can get the DMA to run the ADC for you and simply access the value(s) from memory when you need it (them).
STM-Cube为你正确地生成了大部分代码。
https://stackoverflow.com/questions/34827806
复制相似问题