stm8s红外解码

2019-07-19 21:20发布

我用外部中断+计数器做的,在线调试时,第一次按键可以得到正确数据,第二次按键时,得不到数据,原因是第二次按键计数器的计数有问题,一般都会偏小好多。求大神指点
红外初始化:
void IR_Init(void)
{
    IR_Gpio_Init();

    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOA, EXTI_SENSITIVITY_FALL_ONLY);//下降沿触发  o_Init();

   TIM2_Config();
}

void IR_Gpio_Init(void)
{  
    GPIOA->DDR&=0xF7;
    GPIOA->CR1|=0x08;
    GPIOA->CR2|=0x08;
}

定时器初始化
void TIM2_Config(void)


TIM2->PSCR=0x04;
    TIM2->ARRH=0x3A;//14999+1
    TIM2->ARRL=0x97;
    TIM2->EGR=0x01;
    TIM2_ClearITPendingBit(TIM2_IT_UPDATE);
    TIM2->CR1=0X01;

}

外部中断处理
INTERRUPT_HANDLER(EXTI_PORTA_IRQHandler, 3)
{
  uint16_t Ir_time=0;

    TIM2_Cmd(DISABLE);//停止计数

    Ir_time=TIM2_GetCounter();

    TIM2_SetCounter(0x00);
    TIM2_Cmd(ENABLE);

    if((Ir_time)>12000)////11000
    {
      Ir_start=1;
      Ir_num=0;
    }
    //if(Ir_time<1050)
     //   return;
   if((Ir_start==1)&&(Ir_time<2600)&&(Ir_time>900)) // 2300//2600    1000   //如果已经收到启动代码,且数据在有效范围内
    {   
       if(Ir_num<=7)
       {
         Ir_data<<=1;                     //因为先发地址高位,所以要向右移动
         if(Ir_time>1700)  //   1900  // 1700         //如果数据间隔大于数据0和数据1中间数值,则认为收到数据1
            Ir_data|=1;                 
        //else
            //Ir_data=0;
         if(Ir_num==7)
         {
            code.Sys_Code=Ir_data;
            Ir_data=0;
         }
          Ir_num++;                        //收到一位后IR_Num加1
       }
         else //if(Ir_num=21)
       {
         Ir_data<<=1;            
         if(Ir_time>2000)      
            Ir_data|=1;

          if(Ir_num%8==7)
         {
            code.Rec_Code[(Ir_num/8)-1]=Ir_data;
            Ir_data=0;
         }
         Ir_num++;
       }
        //Ir_buffer[Ir_num-1]=Ir_data;

    }
    if((Ir_num>119) )//&& (Ir_time>450)&&(Ir_time<650))//尾码检测
    {
        Ir_start=0;                   //启动标志清零                    //
        TIM2_Cmd(DISABLE);  //收到全部数据后关闭定时器,可节能,也避免出错
        Sign_Data_Ok=1;    //数据收完后接收结束标志置位
    }

}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
皇者~景帝
1楼-- · 2019-07-19 23:18
帮顶。。。。。。。
正点原子
2楼-- · 2019-07-20 04:52
 精彩回答 2  元偷偷看……

一周热门 更多>