首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32f3 -多路模数转换器

STM32f3 -多路模数转换器
EN

Stack Overflow用户
提问于 2016-01-16 22:00:11
回答 2查看 2.5K关注 0票数 1

我有和STM32f3发现板,我正在尝试使用4个模数转换器通道。这是我的read函数:

代码语言:javascript
复制
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放入循环?或者只是让我的程序工作的其他方式?

EN

回答 2

Stack Overflow用户

发布于 2016-01-16 22:14:24

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

因此,您可能没有正确启动ADC转换,请尝试以下操作:

代码语言:javascript
复制
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中的用户遇到了与您类似的问题,并通过使用以下命令重新启用外部触发器来解决此问题:

代码语言:javascript
复制
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
票数 0
EN

Stack Overflow用户

发布于 2016-01-28 20:37:26

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

代码语言:javascript
复制
- 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为你正确地生成了大部分代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34827806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档