|
楼主 |
发表于 2021-3-4 18:31:50
|
显示全部楼层
static void adcce(void)
{
//参考正电压=VDD=1.224/测量内部VREF*4096
//测量内部温度电压=ADC寄存器/4095×参考正电压=ADC寄存器/测量内部VREF*1.224。
static u8 ia,ib,ic;
static u16 value1[20],fVdd1,res1=0,value2[20],res2=0,value3[20],res3=0;
static u32 fVdd2,fVdd3;
res1=0; res2=0,res3=0;
ADC_Cmd(ADC1,DISABLE);// ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_24Cycles);
ADC_ChannelCmd(ADC1,ADC_Channel_TempSensor,DISABLE);
ADC_ChannelCmd(ADC1,ADC_Channel_18,DISABLE);//xian guan bi zhiqian tongdaodelay_ms(2);
ADC_ChannelCmd(ADC1,ADC_Channel_Vrefint,ENABLE);//使能内部参考电压通道 delay_ms(2);
ADC_Cmd(ADC1,ENABLE);
// delay_ms(1);
ADC_SoftwareStartConv(ADC1);//delay_ms(1);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
ADC_ClearFlag(ADC1,ADC_FLAG_EOC);//清除对应标志
for(ia=0; ia<20; ia++)
{
ADC_SoftwareStartConv(ADC1);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
value1[ia]= ADC_GetConversionValue(ADC1);
res1+= value1[ia];
ADC_ClearFlag(ADC1,ADC_FLAG_EOC);//清除对应标志
}
Vzs=10035200/res1; //Vzs=(1.225*4096/(res1/20))*100
ADC_Cmd(ADC1,DISABLE); // ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_24Cycles);
ADC_ChannelCmd(ADC1,ADC_Channel_Vrefint,DISABLE);
ADC_ChannelCmd(ADC1,ADC_Channel_TempSensor,DISABLE);
ADC_ChannelCmd(ADC1,ADC_Channel_18,ENABLE);
ADC_Cmd(ADC1,ENABLE);
// delay_ms(2);
ADC_SoftwareStartConv(ADC1);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
ADC_ClearFlag(ADC1,ADC_FLAG_EOC);//清除对应标志
for(ib=0; ib<20; ib++)
{
ADC_SoftwareStartConv(ADC1);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
value2[ib]= ADC_GetConversionValue(ADC1);
res2+=value2[ib];
ADC_ClearFlag(ADC1,ADC_FLAG_EOC);//清除对应标志
}
fVdd=(u32)Vzs*res2/27307;//fVdd=(Vzs*(res2/20)/4096)
}
改进了一版 |
|