把中断贴出来,求大侠,测频率不准,占空比严重错误。
u8 TIM5CH1_CAPTURE_STA=0; //ÊäÈë²¶»ñ״̬
u16 TIM5CH1_CAPTURE_VAL1=0; //ÊäÈë²¶»ñÖµ
u16 TIM5CH1_CAPTURE_VAL2=0; //ÊäÈë²¶»ñÖµ
u8 duty=0;
u32 fre=0;
//¶¨Ê±Æ÷5ÖжϷþÎñ³ÌÐò
void TIM5_IRQHandler(void)
{
if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//²¶»ñ1·¢Éú²¶»ñʼþ
{
if(TIM5CH1_CAPTURE_STA&0X40) //²¶»ñµ½Ò»¸öϽµÑØ
{
TIM5CH1_CAPTURE_STA=0; //±ê¼Ç³É¹¦²¶»ñµ½Ò»´ÎÉÏÉýÑØ
TIM5CH1_CAPTURE_VAL1=TIM_GetCapture1(TIM5);
TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //CC1P=0 ÉèÖÃΪÉÏÉýÑØ²¶»ñ
}else //»¹Î´¿ªÊ¼,µÚÒ»´Î²¶»ñÉÏÉýÑØ
{ TIM5CH1_CAPTURE_VAL2=TIM_GetCapture1(TIM5);
duty=TIM5CH1_CAPTURE_VAL1*100/TIM5CH1_CAPTURE_VAL2;
fre=1000000/TIM5CH1_CAPTURE_VAL2;
LCD_ShowString(12,160,200,16,16,"T5 Fre: Hz,Duty: %");
LCD_ShowNum(68,160,fre,7,16);
LCD_ShowNum(188,160,duty,3,16);
// TIM5CH1_CAPTURE_STA=0; //Çå¿Õ
TIM5CH1_CAPTURE_VAL1=0;
TIM5CH1_CAPTURE_VAL2=0;
TIM_SetCounter(TIM5,0);
TIM5CH1_CAPTURE_STA|=0X40; //±ê¼Ç²¶»ñµ½ÁËÉÏÉýÑØ
TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling); //CC1P=1 ÉèÖÃΪϽµÑز¶»ñ
}
}
TIM_ClearITPendingBit(TIM5, TIM_IT_CC1);//|TIM_IT_Update); //Çå³ýÖжϱê־λ
}
|