中级会员
 
- 积分
- 202
- 金钱
- 202
- 注册时间
- 2019-7-17
- 在线时间
- 40 小时
|
50金钱
用定时器测频率,用两个定时器的方式,一个接外部触发脉冲计数,一个做1s中定时,想的是按下按键开启定时器,测完一次之后,在1s的那个定时器的中断里面关闭定时器,可是不行。
按键中断,定时器开始工作:
void EXTI4_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line4); //清除LINE4上的中断标志位
delay_ms(10);//消抖
if(KEY0==0) //按键KEY0
{
TIM_ClearFlag(TIM5,TIM_FLAG_Update);
TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM5,ENABLE);
TIM_SetCounter(TIM5,0);
TIM_ClearFlag(TIM3,TIM_FLAG_Update);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM3,ENABLE);
TIM_SetCounter(TIM3,0);
CountSTA=0;//开启下一次捕获
CountValue=0;
BEEP=0;
}
}
定时1s,记完即关闭定时器:
//1s计数
void TIM5_IRQHandler(void)
{
//在这1s内的计数值为:overvalve*arr+countervalue
TIM_ClearITPendingBit(TIM5,TIM_IT_Update); //清除中断标志位
if((CountSTA&0x80)==0)
{
CountSTA|=0x80;
CountValue=TIM_GetCounter(TIM3);
TIM_ClearFlag(TIM5,TIM_FLAG_Update);
TIM_ITConfig(TIM5,TIM_IT_Update,DISABLE); //关闭更新中断
TIM_Cmd(TIM5,DISABLE);
TIM_ClearFlag(TIM3,TIM_FLAG_Update);
TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE); //关闭更新中断
TIM_Cmd(TIM3,DISABLE);
}
}
可是不行
|
最佳答案
查看完整内容[请看2#楼]
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
TIM_Cmd(TIM3,DISABLE);
TIM_ClearITPendingBit(TIM5,TIM_IT_Update); //清除中断标志位
TIM_Cmd(TIM5,DISABLE);
按这种方法来是可以关闭的,参考链接:https://blog.csdn.net/ludaoyi88/article/details/51934122
|