用stm32f103的定时器捕获红外接收头信号的问题。

2019-10-15 01:01发布

if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)
        {
                TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
        }
        else if(TIM_GetITStatus(TIM3,TIM_IT_CC1)==SET)
        {
                TIM_ClearITPendingBit(TIM3,TIM_IT_CC1);
                if(FLAGNUML == 0)
                {
                        CapValL1 = TIM_GetCapture1(TIM3);
                        FLAGNUML = 1;                               
                }
                else if(FLAGNUML == 1)
                {               
                  CapValL2 = TIM_GetCapture1(TIM3);
                        if(CapValL2 > CapValL1)
                        {
        CapValL = CapValL2 - CapValL1;
                        }
                        else
                        {
                                CapValL = ((10000 - CapValL1) + CapValL2);
                        }
               
                if((CapValL > 9)&&(CapValL < 14))
                {
                        CapValL = 0;
                        FLAG_LEFT = 01;
                        FLAGNUML = 0;                       
                }
                else if((CapValL > 14)&&(CapValL < 18))
                {
                        CapValL = 0;
                        FLAG_LEFT = 02;
                        FLAGNUML = 0;
                }
        }
        }
这是我定时器中断的函数。
现在的问题是,红外接收头接收到的信号很好,但是我通过捕获信号,获得信号的周期,通过周期不同,赋予FLAG_LEFT不同的值,然后在主函数中调用FLAG_LEFT的值,这个值不同,则执行不同的指令,但是有时候会执行,有时候不执行。(ps。红外接收头一直可以收到清晰稳定的信号)

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
madao14751
1楼-- · 2019-10-15 05:39
定时器的分频值是7200,然后溢出值是10000
madao14751
2楼-- · 2019-10-15 09:40
对程序进行单步调制的时候,把断点打在 if((CapValL > 9)&&(CapValL < 14))前面,发现CapValL的值并没有变,有时候会变成A/B/C,都在9~14的范围内,但是有时候一直显示0

一周热门 更多>