//定时器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久都没人回。。哎。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
别看了吧。
自己写一个代码出来。
看不懂的情况下,最好就自己去写,让你写,你怎么写?
回复【楼主位】爱在暖晴天: --------------------------------- 别看了吧。 自己写一个代码出来。 看不懂的情况下,最好就自己去写,让你写,你怎么写?
---------------------------------
额~~~~写不出来,咋办。。上述代码我提的两个问题真把我困惑了好久。。。
那先搞简单点的。。。
---------------------------------
这不是现在急需用到这个功能么,原子大大,针对我上述那两个问题,麻烦您详细讲解下吧,多谢了
回复【5楼】爱在暖晴天: --------------------------------- 我的注释已经很详细了 论坛我已回答过好多次,还搞不懂的,直接电话我。
---------------------------------
这么晚了,原子大大不怕我当成骚扰打电话打过去,呵呵
一周热门 更多>