今天在调试ADC,
就是采集一个光感的ADC变化,但是无论怎么弄采到的值都是一定的,
而另外一路温感采集的ADC值就是对的,我用电表量了下,两路都是有变化的,但是光感那一路就是采的不对
然后我把温感和光感的ADC对调,温感也出现原来光感一样的现象。
下面是我的初始化
void AdcInit(void)
{
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE); //使能ADC1的时钟
/*/==Configures the sampling time for the selected ADC channel group.
配置选中的ADC通道组的采样时间*/
ADC_Init(ADC1,ADC_ConversionMode_Single,ADC_Resolution_8Bit,ADC_Prescaler_1);
ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels,ADC_SamplingTime_96Cycles);
/*Enables or disables the selected ADC peripheral.*/
/*使能或失能所选的ADC外设*/
ADC_Cmd(ADC1, ENABLE);
/*将三个adc输入脚配置为浮空输入模式*/
GPIO_Init( ADC_PORT,TempAdc_PIN,GPIO_Mode_In_FL_No_IT );
//GPIO_Init( ADC_PORT,BatAdc_PIN,GPIO_Mode_In_PU_No_IT );
GPIO_Init( ADC_PORT,LightAdc_PIN,GPIO_Mode_In_FL_No_IT );
}
两路ADC放在一个初始化里面在,应该没有问题啊
另外我度ADC的值是用的这个函数
uint16_t VREF_Value(uint16_t ADC_Channel)//测量内部参考电压VREF值
{
uint16_t ADC_value=0;
/*使能或失能所选的ADC通道*/
ADC_ChannelCmd(ADC1, ADC_Channel, ENABLE);
/*Starts ADC conversion, by software trigger.*/
ADC_SoftwareStartConv(ADC1);
while( ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0 );
ADC_value=ADC_GetConversionValue(ADC1);
ADC_ChannelCmd(ADC1, ADC_Channel, DISABLE);
ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
return ADC_value;
}
不知道有什么问题,顺便说下 我用的是STM8L051,光感的通道是PB4,温感是PB7,
我看到文档里面说
A pull-up is applied to PB0 and PB4 during the reset phase. These two pins are input floating after reset release.
是不因为是PB4的原因,新手不懂,希望大神帮帮忙
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>