STM32
直播中

张杰

7年用户 1294经验值
私信 关注
[问答]

定时器设定0.1MS中断,红外接收怎么收不对?

            @near @interrupt void tiM1_UPD_OVF_TRG_BRK_IRQHandler (void)
{

water= GET_WATER_PIN();

if( water==0)
  {  sppluscn3=1;
              if(capVa20==0)
             { sppluscn25=capVa21;
                     capVa21=0;
                         }
                   capVa20++;
                  
               
               
        }
        else
         {
                 if (sppluscn3==1)
                   {
                                 if (capVa21==0)
                                  { sppluscn4=capVa20;
                                         capVa20=0;
                                   }
                                         capVa21++;
                                         
                                         
                         }
                }         
    temp_ir=sppluscn4+sppluscn25;
if ((IrRecStep==0)  (sppluscn3==1)  (sppluscn25>40)  (sppluscn25<50))
         {// temp_ir=sppluscn4+sppluscn25;
                if ((temp_ir>100)  (temp_ir<150))
                    {IrRecStep=1;
                                IrIndex=0;
                                sppluscn3=0;
        sppluscn25=0;
        sppluscn4=0;
        IR_DATA=0;
                          }        
      else IrRecStep=0;

          }
   else if((IrRecStep==1)  (sppluscn3==1)  (sppluscn25>2))
      {
      if((temp_ir>5)  (temp_ir<13))
                 {
                         IR_DATA>>=1;
                         IrIndex++;
                         sppluscn3=0;
                         sppluscn25=0;
                         sppluscn4=0;
                 }
         else
                 if((temp_ir>18)  (temp_ir<25))
                 {
                         IR_DATA>>=1;
                         IR_DATA=IR_DATA+0x80;
                         IrIndex++;
                         sppluscn3=0;
                         sppluscn25=0;
                         sppluscn4=0;
                 }
         
          if(IrIndex==32)
                {
                        IrRecFlag=1;
                        IrIndex=0;
                        IrRecStep=0;
                }
               
        
}
          TIM1->SR1 = (u8)(~TIM1_FLAG_UPDATE);
          return;
}



回帖(1)

王杰

2024-5-10 17:01:56
1. 确保红外接收器的硬件连接正确。检查红外接收器的VCC、GND和信号引脚是否正确连接到微控制器上。

2. 确保定时器中断的配置正确。您提到定时器设定为0.1ms中断,但您没有提供定时器的配置代码。请确保定时器的预分频器、自动重载值和中断使能位都已正确设置。

3. 检查红外接收器的信号引脚是否正确读取。在您的代码中,`water`变量似乎是从`GET_WATER_PIN()`函数中获取的。请确保此函数正确地读取了红外接收器的信号引脚。

4. 检查中断服务例程(ISR)中的逻辑。在您的代码中,当`water == 0`时,`sppluscn3`被设置为1。请确保这是您预期的行为。此外,`capVa20`和`capVa21`变量的作用和值也需要检查。

5. 确保您的代码没有语法错误。在您的代码片段中,有一些不完整的表达式,例如`&nbs`。这可能是由于复制粘贴时的错误。请检查您的代码,确保没有遗漏或错误的字符。

6. 使用调试工具。如果可能的话,使用调试器来检查变量的值和程序的执行流程。这可以帮助您更快地找到问题所在。

7. 如果问题仍然存在,请尝试使用更简单的代码来测试红外接收器。例如,您可以先尝试读取红外接收器的信号引脚,然后逐步增加复杂性。

希望这些建议能帮助您解决问题。如果您能提供更完整的代码和详细的问题描述,我将更好地帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分