新手入门
- 积分
- 12
- 金钱
- 12
- 注册时间
- 2018-10-17
- 在线时间
- 29 小时
|
5金钱
void TIM5_IRQHandler(void) //
{
if((TIM5CH1_CAPTURE_STA&0X80)==0)//还未成功捕获
{
if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) //if2
{
if(TIM5CH1_CAPTURE_STA&0X40)//已经捕获到高电平了 //if3 (ˇ?ˇ) 我感觉两个if语句顺序应该互换
{
if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
{
TIM5CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
TIM5CH1_CAPTURE_VAL=0XFFFF;
}else TIM5CH1_CAPTURE_STA++;
}
}
if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//捕获1发生捕获事件 先进else后进if
{
if(TIM5CH1_CAPTURE_STA&0X40) //捕获到一个下降沿 因else后中断标志发生改变所以捕获的是下降沿
{
TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次上升沿
TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5); //从 TIMx_CCR1 就可以读出通道 1 捕获发生时刻的 TIMx_CNT 值
TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
}else //还未开始,第一次捕获上升沿
{
TIM5CH1_CAPTURE_STA=0; //清空
TIM5CH1_CAPTURE_VAL=0;
TIM_SetCounter(TIM5,0); //记刚摁下WK_UP时 此刻CNT=0;
TIM5CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿
TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling); //CC1P=1 设置为下降沿捕获
}
}
}
TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
}
|
最佳答案
查看完整内容[请看2#楼]
效果一样,但是下面这样节约代码运行时间[/backcolor]if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) //if2[/backcolor]
{ [/backcolor]
if(TIM5CH1_CAPTURE_STA&0X40)//已经捕获到高电平了[/backcolor]
[/backcolor]
[/backcolor]
if(TIM5CH1_CAPTURE_STA&0X40) 放在前面每次中断都要判断两个if,因为上升沿捕获了,这个if一直成立判断完还要判断[/backc ...
|