目的:用stm32测量频率,测量频率范围越大越好 做法:我是利用定时中断+外部中断来实现的。具体做法:外部中断每来一个脉冲上升沿促发中断一次,频率值加1,记到0.5s后定时器中断发生,显示此时频率的值。但是频率上不去,只能到700K左右。有没有更好的方法测频率呢?
/*外部中断处理函数*/
void EXTI0_IRQHandler(void)
{
g_freq++; //计数值,最后当频率值显示出来
EXTI->PR=1<<0; //清除LINE0上的中断标志位
}
/*定时器中断服务函数*/
void TIM3_IRQHandler(void) //TIM3中断
{
flag = 1; //之里的flag用于main函数里面判断是否0.5S到了,如果到了则显示出频率值
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx的中断待处理位:TIM 中断源
}
main函数关键部分:
while(1)
{
if(flag)
{
Freq_tmp = g_freq;
printf("%d\n", Freq_tmp);//之里用串口打印出频率值在终端上
g_freq = 0; //频率值清零,重新计数
flag = 0; //清除标记,下次0.5S定时器中断到来后重新显示出来
}
}
|