u16 TIM4CH1_CAPTURE_OLD;
u8 buhuo_diyige=0;
u8 shuju_num=0;
u8 shuju_start=0;
u16 jiange_shuzu[5];
u16 anjian[4];
u8 dangwei=0;
void TIM4_IRQHandler(void)
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) //判断是否为更新中断
{
buhuo_diyige=0;
shuju_num=0;
shuju_start=0;
}
if (TIM_GetITStatus(TIM4, TIM_IT_CC3) != RESET) //捕获2发生捕获事件
{
if (shuju_start==0) //没有发现起始帧
{
if (buhuo_diyige==0 ) //已经捕获到一个上升沿,且不是有用按键数据
{
TIM_SetCounter(TIM4, 0);
buhuo_diyige=1; //标记已捕获到上升沿
}
else //又捕获的是上升沿
{
u32 CH2_Time= TIM_GetCapture3(TIM4);
if (CH2_Time>5000 && CH2_Time<15000) //5ms~10ms为第一个起始脉冲
{
TIM4CH1_CAPTURE_OLD=TIM_GetCapture3(TIM4); //记录当前值 这个一般是0左右,因为上面刚设置0
shuju_start=1; //下面再捕获就是有用值
buhuo_diyige=0;
shuju_num=0;
}
}
}
if(shuju_start==1)
{
jiange_shuzu[shuju_num]=TIM_GetCapture3(TIM4);
shuju_num=shuju_num+1;//shuju_num++;
if(shuju_num>=5)
{
u8 i=0;
for(i=0;i<4;i++)
{
anjian[i]=jiange_shuzu[i+1]-jiange_shuzu[i];
}
if(anjian[0]>1500&&anjian[1]>1500&&anjian[2]>1500&&anjian[3]>1500 &&anjian[0]<3500&&anjian[1]<3500&&anjian[2]<3500&&anjian[3]<3500)
{
if(anjian[0]<2500 && anjian[1]<2500 && anjian[2]<2500 && anjian[3]>2500) //2 2 2 3
dangwei=2;
if(anjian[0]<2500 && anjian[1]<2500 && anjian[2]>2500 && anjian[3]>2500) //2 2 3 3
dangwei=3;
if(anjian[0]<2500 && anjian[1]<2500 && anjian[2]>2500 && anjian[3]<2500) //2 2 3 2
dangwei=4;
if(anjian[0]<2500 && anjian[1]>2500 && anjian[2]>2500 && anjian[3]<2500) //2 3 3 2
dangwei=5;
if(anjian[0]<2500 && anjian[1]>2500 && anjian[2]<2500 && anjian[3]<2500) //2 3 2 2
dangwei=6;
if(anjian[0]<2500 && anjian[1]>2500 && anjian[2]<2500 && anjian[3]>2500) //2 3 2 3
dangwei=7;
if(anjian[0]<2500 && anjian[1]>2500 && anjian[2]>2500 && anjian[3]>2500) //2 3 3 3
dangwei=8;
if(anjian[0]>2500 && anjian[1]>2500 && anjian[2]>2500 && anjian[3]>2500) //3 3 3 3
dangwei=9;
if(anjian[0]>2500 && anjian[1]>2500 && anjian[2]>2500 && anjian[3]<2500) //3 3 3 2
dangwei=10;
}
buhuo_diyige=0;
shuju_num=0;
shuju_start=0;
TIM_SetCounter(TIM4, 0);
}
}
}
TIM_ClearITPendingBit(TIM4, TIM_IT_CC3|TIM_IT_Update);//清除中断标志位
}