目的:用stm32測(cè)量頻率,測(cè)量頻率范圍越大越好 做法:我是利用定時(shí)中斷+外部中斷來(lái)實(shí)現(xiàn)的。具體做法:外部中斷每來(lái)一個(gè)脈沖上升沿促發(fā)中斷一次,頻率值加1,記到0.5s后定時(shí)器中斷發(fā)生,顯示此時(shí)頻率的值。但是頻率上不去,只能到700K左右。有沒(méi)有更好的方法測(cè)頻率呢?
/*外部中斷處理函數(shù)*/
void EXTI0_IRQHandler(void)
{
g_freq++; //計(jì)數(shù)值,最后當(dāng)頻率值顯示出來(lái)
EXTI->PR=1<<0; //清除LINE0上的中斷標(biāo)志位
}
/*定時(shí)器中斷服務(wù)函數(shù)*/
void TIM3_IRQHandler(void) //TIM3中斷
{
flag = 1; //之里的flag用于main函數(shù)里面判斷是否0.5S到了,如果到了則顯示出頻率值
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx的中斷待處理位:TIM 中斷源
}
main函數(shù)關(guān)鍵部分:
while(1)
{
if(flag)
{
Freq_tmp = g_freq;
printf("%d\n", Freq_tmp);//之里用串口打印出頻率值在終端上
g_freq = 0; //頻率值清零,重新計(jì)數(shù)
flag = 0; //清除標(biāo)記,下次0.5S定時(shí)器中斷到來(lái)后重新顯示出來(lái)
}
}
|