stm32f303 ADC 模拟看门狗不能中断

芯片:stm32f303CBT6
IDE:keil
我配置好后ADC后,当从ADC通道引脚输入的电压超过设置范围后,
不能进入ADC模拟看门狗中断。
但在main函数while循环里调用ADC_GetConversionValue(ADC1)时,才会进入
ADC模拟看门狗中断,请问有人用过stm32f303的看门狗吗?
如果只有在while循环体中不断调用ADC_GetConversionValue(ADC1)才能进入ADC
模拟中断的话,那这个中断失去意义了,那程序每次读取后也可判断范围。我想应该
是不用调用ADC_GetConversionValue(ADC1)也可以进入中断的,只不过我代码用得
不对,以下是代码,请用过stm32f303看门狗的帮忙指正,在这里谢谢了。
注:不用DMA功能,用DMA功能当然可以产生中断,因为DMA会在后台会读取ADC数据寄存器。

u32 calibration_value1 = 0;
void ADC1_2_IRQHandler(void)
{
if(SET == ADC_GetFlagStatus(ADC1,ADC_FLAG_AWD1))
{
ADC_ITConfig(ADC1,ADC_IT_AWD1,DISABLE);
ADC_ClearFlag(ADC1,ADC_FLAG_AWD1);
ADC_ClearITPendingBit(ADC1,ADC_IT_AWD1);
}
if(SET == ADC_GetFlagStatus(ADC2,ADC_FLAG_AWD2))
{
ADC_ITConfig(ADC2,ADC_IT_AWD2,DISABLE);
ADC_ClearITPendingBit(ADC2,ADC_IT_AWD2);

}

}
void adc1_init(void)
{

ADC_CommonInitTypeDef cs;
ADC_InitTypeDef         adcs;

ADC_VoltageRegulatorCmd(ADC1, ENABLE);
delay_ms(1);
ADC_SelectCalibrationMode(ADC1, ADC_CalibrationMode_Single); ADC_StartCalibration(ADC1);

while(ADC_GetCalibrationStatus(ADC1) != RESET );
calibration_value1 = ADC_GetCalibrationValue(ADC1);
adcs.ADC_ContinuousConvMode = ADC_ContinuousConvMode_Enable;
adcs.ADC_Resolution = ADC_Resolution_12b;
adcs.ADC_ExternalTrigConvEvent = ADC_ExternalTrigConvEvent_0;//ADC_ExternalTrigConvEvent_7
adcs.ADC_ExternalTrigEventEdge = ADC_ExternalTrigEventEdge_None;
adcs.ADC_DataAlign = ADC_DataAlign_Right;
adcs.ADC_OverrunMode = ADC_OverrunMode_Disable;
adcs.ADC_AutoInjMode = ADC_AutoInjec_Disable;
adcs.ADC_NbrOfRegChannel = 1;
ADC_Init(ADC1, &adcs);
cs.ADC_Clock = ADC_Clock_AsynClkMode;
cs.ADC_Mode  = ADC_Mode_Independent;//ADC_Mode_Interleave;
cs.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;;
cs.ADC_DMAMode = ADC_DMAMode_Circular;
cs.ADC_TwoSamplingDelay = 0;
ADC_CommonInit(ADC1, &cs);

//Tconv = Sampling time + 12.5 ADC clock cycles   (12.5+Sampling)/64M
ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 1, ADC_SampleTime_61Cycles5);//ADC_SampleTime_1Cycles5

ADC_Cmd(ADC1, ENABLE);

}

void adc1_watchDog_cfg(void)
{

ADC_AnalogWatchdog1SingleChannelConfig(ADC1,ADC_Channel_3);
ADC_AnalogWatchdog1ThresholdsConfig(ADC1,400,0);
ADC_AnalogWatchdogCmd(ADC1,ADC_AnalogWatchdog_SingleRegEnable);
ADC_ITConfig(ADC1,ADC_IT_AWD1,ENABLE);

}

void ad_gpio_cfg(void)
{
GPIO_InitTypeDef gs;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

// RCC_AHB1PeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
gs.GPIO_Mode = GPIO_Mode_AN;
gs.GPIO_OType = GPIO_OType_PP;
gs.GPIO_PuPd = GPIO_PuPd_NOPULL;
gs.GPIO_Speed = GPIO_Speed_50MHz;
//PA1--->ADC1_IN2 PA2--->ADC1_IN3 PA4--->ADC2_IN1
gs.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_4;
GPIO_Init(GPIOA, &gs);
}

void adc_init(void)
{
//VrefintCal = *((u16 *)(VREFINT_CAL_ADDR));
ad_gpio_cfg();
RCC_ADCCLKConfig(RCC_ADC12PLLCLK_Div1);//RCC_ADC12PLLCLK_Div1
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ADC12, ENABLE);

ADC_DeInit(ADC1);
adc1_init();
adc1_watchDog_cfg();
ADC_StartConversion(ADC1);

}

mai函数
int main(void)
{
...
while(1)
{
ADC_GetConversionValue(ADC1);
}
...
}


https://blog.csdn.net/hexiechina2010/article/details/41803649