目的:用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定時器中斷到來后重新顯示出來
}
}
|