新手入门
- 积分
- 7
- 金钱
- 7
- 注册时间
- 2020-8-4
- 在线时间
- 1 小时
|
1金钱
中断计算方式
ADC_InitStructer.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructer.ADC_ScanConvMode=DISABLE;
ADC_InitStructer.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructer.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStructer.ADC_Mode=ADC_Mode_Independent;
ADC_InitStructer.ADC_NbrOfChannel=1;
ADC_Init(ADC1,&ADC_InitStructer);
NVIC_InitStructer.NVIC_IRQChannel=ADC1_2_IRQn;
NVIC_InitStructer.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructer.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructer.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVIC_InitStructer);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
Delay_nms(10);
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
void ADC1_2_IRQHandler()
{
if(ADC_GetITStatus(ADC1,ADC_IT_EOC)!=RESET)
{
ADC1_Val=ADC_GetConversionValue(ADC1);
Delay_nms(5);
}
ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);
}
void ADC_GET_Valche()
{
u8 i=0;
u16 templ=0,temp_Val=0;
float Temp_ADC;
ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);
for(i=0;i<1;)
{
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
templ+=ADC1_Val;
Delay_nms(5);
i++;
}
temp_Val=templ/1;
printf("temp_Val= %d\r\n",temp_Val);
Temp_ADC=(float)temp_Val*(3.3/4096);
printf("Temp_ADC= %.4f\r\n",Temp_ADC);
}
循环扫描方式
void UserADC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructer;
ADC_InitTypeDef ADC_InitStructer;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
GPIO_InitStructer.GPIO_Mode=GPIO_Mode_AIN;
GPIO_InitStructer.GPIO_Pin=GPIO_Pin_1;
GPIO_Init(GPIOA,&GPIO_InitStructer);
ADC_InitStructer.ADC_Mode=ADC_Mode_Independent;
ADC_InitStructer.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructer.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructer.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStructer.ADC_NbrOfChannel=1;
ADC_InitStructer.ADC_ScanConvMode=DISABLE;
ADC_Init(ADC1,&ADC_InitStructer);
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1))
Delay_nms(10);
ADC_StartCalibration(ADC1);
while(ADC_GetSoftwareStartConvStatus(ADC1))
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
}
u16 ADC_Val(u16 ch,u16 tims)
{
u16 tem;
u16 Val=0;
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);
for(tem=0;tem<tims;)
{
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)!=RESET)
Val+=ADC_GetConversionValue(ADC1);
Delay_nms(5);
tem++;
}
return Val/tims;
}
void Printf_ADC_Vache()
{
u16 Vache=ADC_Val(ADC_Channel_1,1);
float volatil=0;
Delay_nms(500);
printf("ADC cai yang zhi %d\r\n",Vache);
volatil=(float)Vache*(3.3/4096);
printf("ADC zhi %.4f\r\n",volatil);
}
同一个点位 循环扫描测量值为3.2219, 中断方式计算结果为3.2911
|
|