关于输入捕获!

2019-07-21 03:29发布

//定时器2中断服务程序 
void TIM2_IRQHandler(void)
{   if((TIM2CH1_CAPTURE_STA&0X80)==0)//还未成功捕获 
 {  
  if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
  
  {    
   if(TIM2CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
   {
    
    if((TIM2CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
    {
     TIM2CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
     TIM2CH1_CAPTURE_VAL=0XFFFF;
    }
   else
    TIM2CH1_CAPTURE_STA++;
     
   } 
  }
 if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
  { 
   if(TIM2CH1_CAPTURE_STA&0X40)  //捕获到一个下降沿   
   {      
    TIM2CH1_CAPTURE_STA|=0X80;  //标记成功捕获到一次上升沿
    TIM2CH1_CAPTURE_VAL=TIM_GetCapture1(TIM2);
       TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
   }else          //还未开始,第一次捕获上升沿
   {
    TIM2CH1_CAPTURE_STA=0;   //清空
    TIM2CH1_CAPTURE_VAL=0;
     TIM_SetCounter(TIM2,0);
    TIM2CH1_CAPTURE_STA|=0X40;  //标记捕获到了上升沿
       TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling);  //CC1P=1 设置为下降沿捕获
   }     
  }                    
  }     TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
}
第一个if判断第8位为0,表示还未成功捕获,接着下一个if却说成功捕获一个高电平,这不自相矛盾么? 还有下面的IF“捕获1发生捕获事件”也在未能捕获成功的第一个if语句中,这不是很匪夷所思么。。。谁能详细解释下这问题。。。问了N久都没人回。。哎。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
wghfbj
1楼-- · 2019-07-22 04:48
回复【2楼】正点原子:
---------------------------------
回复【楼主位】爱在暖晴天:
---------------------------------
按照原子的思路尝试自己写,到写不出来的地方就去看下原子的代码,这样写出来程序后就很容易理解原子代码的意思啦,写完之后你会发现收获很大。我就是这样做的。
87771559
2楼-- · 2019-07-22 08:24
正点原子 发表于 2013-10-26 19:43
那先搞简单点的。。。

}else          //还未开始,第一次捕获上升沿
原子哥,这句如果第一次捕获的是下降沿,那么第一次得到的数据是否会出错?
还有那个占空比为什么会从1直接到变成500?明明到2就停止自减了。

一周热门 更多>