stm32f103定时器中断里面ADC转换卡死的问题

今天用stm32f103的ADC转换测量MQ-2易燃气体传感器的电压值。发现 adcx=Get_Adc_Average(ADC_Channel_1,5);函数卡死在了定时器中断里面,怀疑是函数的问题。但是把它放到主循环里面又可以使用。起初以为是转换的周期太长
u16 Get_Adc_Average(u8 ch,u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return temp_val/times;
}
定时器中断里用的是10次转换: adcx=Get_Adc_Average(ADC_Channel_1,10);每次5ms十次就是50ms,于是有怀疑是中断溢出的问题。但是看了看定时器初始化
TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms 是500ms。这个时间再转10次都是可以的,所以不是这个问题。
于是想到可能是其他模块的影响,就把其他模块的初始化注释掉了。然后就神奇的回复正常了。然后就把注释的部分放开,然后又神奇的可以运行了。最后发现是我无意中把定时器初始化和ADC初始化掉了个位置。一定是先初始化ADC模块,才初始化定时器。因为定时器一经初始化就马上开始计时进入中断,而这时定时器里的ADC模块还没初始化,程序是不认识的,所以就卡在了stm32f103定时器中断里面ADC转换卡死的问题
尽管后来ADC初始化成功,但是程序也出不来了。
stm32f103定时器中断里面ADC转换卡死的问题
换成
stm32f103定时器中断里面ADC转换卡死的问题