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); //Çå³ýÖжϱê־λ }
时间: 2024-04-15 16:26:57 浏览: 140
STM8L_TIM2_CH1_PWM_pwm_STM8LPWM_STM8L051F3_STM8L_TIM2_CH1
5星 · 资源好评率100%
这是一个用于处理 TIM2 定时器中断的函数。在函数中,主要涉及到对 TIM2CH1 的捕获事件进行处理。
首先,通过检查 TIM2CH1_CAPTURE_STA 的值来判断是否已经成功捕获到一个上升或下降沿的信号。如果 TIM2CH1_CAPTURE_STA 的最高位(0x80)为0,表示尚未成功捕获到信号。
接下来,通过检查 TIM2 的更新中断标志位(TIM_IT_Update)来判断是否发生了定时器溢出事件。如果发生了溢出事件,再根据 TIM2CH1_CAPTURE_STA 的值进行相应的处理。
如果 TIM2CH1_CAPTURE_STA 的第6位(0x40)为1,表示已经成功捕获到一个上升沿的信号。如果 TIM2CH1_CAPTURE_STA 的低6位(0x3F)等于0x3F,表示已经连续捕获了63个上升沿的信号,进一步将 TIM2CH1_CAPTURE_STA 的最高位(0x80)置1,表示捕获成功,并记录捕获到的值为0xFFFF。
如果以上条件都不满足,则表示当前是第一次捕获到上升沿的信号,需要进行相应的初始化操作,并将 TIM2CH1_CAPTURE_STA 的第6位(0x40)置1,表示已经捕获到上升沿。
最后,清除 TIM2 的中断标志位,以结束中断处理。
请注意,这段代码可能是在某个特定的嵌入式系统中使用的,具体的功能和上下文需要参考该系统的文档或者代码说明。
阅读全文