ADC使用问题

2019-08-20 18:19发布

本帖最后由 WWCool 于 2017-4-18 12:02 编辑

最近经常要用到ADC,我使用的是模拟看门狗进入中断模式,但我发现必须在while(1)中写上例程中的Get_ADC();模拟看门狗才能正常进入中断,我不明白这是为什么?
ADC的模式我设置的是  ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
                                  ADC_InitStructure.ADC_ScanConvMode=DISABLE;
                                  ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;
                                  ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
                                  ADC_InitStructure.ADC_NbrOfChannel=1;
                                  ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
                                  ADC_Init(ADC1,&ADC_InitStructure);
例程中的Get_Adc3函数。
u16 Get_Adc3(u8 ch)   
{

ADC_RegularChannelConfig(ADC3, ch, 1, ADC_SampleTime_239Cycles5 );      
  
//ADC_SoftwareStartConvCmd(ADC3, ENABLE);   
  
while(!ADC_GetFlagStatus(ADC3, ADC_FLAG_EOC ));//等待转换结束   该位为ADC转换完成标志位,对于这一位的配置方式还不太了解
return ADC_GetConversionValue(ADC3); //返回最近一次ADC3规则组的转换结果
}
我看这个函数也没有做什么事情啊,就是设置一下通道的采样时间,其余的就是判断标志位。
我将ADC_RegularChannelConfig(ADC3, ch, 1, ADC_SampleTime_239Cycles5 );   这一句放在while(1)中,不用Get_Adc3()就不行.

我对于ADC的理解恐怕还很不完善。
1、打开ADC之后,我设置ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;ADC工作在连续模式,那么ADC就会一直进行转换是吗?
2、为什么例程中,将对ADC通道采样时间的配置ADC_RegularChannelConfig(ADC3, ch, 1, ADC_SampleTime_239Cycles5 );   放在 Get_Adc3();中呢?

欢迎大神为我答疑解惑,十分感谢。







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
15937417823
1楼-- · 2019-08-20 23:22
我也是刚接触这个东西,据我理解,Get_Adc(),这个函数除了你说的设置哪个通道以及采样时间外,还使能了ADC的转换功能,(ADC_SoftwareStartConvCmd(ADC1, ENABLE))这个才是ADC的主要工作。就相当于初始化了LED灯之后,给它置位点亮。另外,把选择通道放在Get_Adc3()里,是为了你使用ADC1的其他通道时,不需要修改上边的初始化ADC1函数。

一周热门 更多>