求助,两个定时器,进不了主程序一直在定时器中断里?

2019-07-21 06:58发布

本帖最后由 kinshen 于 2018-12-2 21:53 编辑

有2个定时器,TIM2做10ms定时中断,在中断里做模式控制,另外一个中断是TIM5捕获中断,测量外部脉冲的频率。

TIM2单独工作的时候,没有问题!

加上TIM5的时候,会出现程序进不来主程序的情况!但是这个时候不固定,有的时候很快就跑飞,有的时候时间长点才跑飞!

TIM2和TIM5的配置如图(代码粘贴后注释是乱码,所以截图了)?

请帮忙分析下是什么原因!谢谢了!


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
kinshen
1楼-- · 2019-07-22 12:50
问题貌似解决了,在timer2的10ms定时中断中调用了AD采集函数,自己写了给多次采集取平均值的函数,在函数中调用了延时函数,代码如下,
u16 Get_Adc_Average(u8 ch,u8 times)
{
        u32 temp_val=0;
        u8 t;
        u16 k;
        u16 min,max;
        for(t=0;t<times;t++)
        {
                temp_val+=Get_Adc(ch);
                for(k=0;k<200;k++);
//                delay_us(100);
        }
        return temp_val/times;
}          

发现:如果用delay_us(10)函数,程序就会出问题(主程序执行不了,一直运行定时器中断程序);如果吧延时时间调的大些,比如delay_us(100)就没关系。

好像频繁采集AD数据造成了影响?

不知道这样是什么原因呢?哪位高手帮忙分析一下!
正点原子
2楼-- · 2019-07-22 14:34
kinshen 发表于 2018-12-8 17:36
问题貌似解决了,在timer2的10ms定时中断中调用了AD采集函数,自己写了给多次采集取平均值的函数,在函数中 ...

放main函数里面试试
kinshen
3楼-- · 2019-07-22 16:20
 精彩回答 2  元偷偷看……
正点原子
4楼-- · 2019-07-22 17:01
kinshen 发表于 2018-12-9 08:36
放main函数里面也是一样的。。。

仿真看看
liujie136997963
5楼-- · 2019-07-22 17:51
仿真器一步一步调试,然后定位到卡死的地方,然后再分析原因。

一周热门 更多>