簡體   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