新手上路
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2019-8-19
- 在线时间
- 10 小时
|

楼主 |
发表于 2019-10-5 16:39:04
|
显示全部楼层
void TIM4_IRQHandler(void)
{
if((TIM4CH1_CAPTURE_STA&0X80)==0)//还未成功捕获
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{
if(TIM4CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
{
if((TIM4CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了 5S未检测到则计数为0
{
TIM4CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
TIM4CH1_CAPTURE_VAL= 0XFFFFFFFF;
}else TIM4CH1_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM4, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
{
if(TIM4CH1_CAPTURE_STA&0X40) //捕获到一个沿
{
TIM4CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次上升沿
TIM4CH1_CAPTURE_VAL=TIM_GetCapture1(TIM4);
}
else //还未开始,第一次捕获上升沿
{
TIM4CH1_CAPTURE_STA=0; //清空
TIM4CH1_CAPTURE_VAL=0;
TIM_Cmd(TIM4,DISABLE );
TIM_SetCounter(TIM4,0);
TIM4CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿
TIM_Cmd(TIM4,ENABLE );
}
}
}
TIM_ClearITPendingBit(TIM4, TIM_IT_CC1|TIM_IT_Update);
} |
|