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

本文探讨了在STM32F103中使用ADC测量MQ-2气体传感器电压时遇到的问题,详细分析了函数在定时器中断中卡死的原因,涉及ADC与定时器初始化顺序对中断响应的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天用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模块还没初始化,程序是不认识的,所以就卡在了在这里插入图片描述
尽管后来ADC初始化成功,但是程序也出不来了。
在这里插入图片描述
换成
在这里插入图片描述

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值