这是我使用HC-sr04超声波模块 测距的程序,请 各位大神 看一下 哪里出错了 老是测不出来 下面是主要程序 使用的板子是STM32f429
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)
{
TIM_ClearFlag(TIM3,TIM_FLAG_Update);
LED0=!LED0;
msHcCount++;
}
}
u32 GetEchoTimer(void)
{
u32 t = 0;
delay_init(168);
// u32 t = 0;
t = msHcCount*1000;//μÃμ½MS
t += TIM_GetCounter(TIM3);//μÃμ½US
TIM3->CNT = 0; //½«TIM3¼Æêy¼Ä′æÆ÷μļÆêyÖμÇåáã
delay_ms(50);
return t;
}
static void OpenTimerForHc() //′ò¿a¶¨ê±Æ÷
{
TIM_SetCounter(TIM3,0);//Çå3y¼Æêy
msHcCount = 0;
TIM_Cmd(TIM3, ENABLE); //ê1ÄüTIMxíaéè
}
static void CloseTimerForHc() //1رն¨ê±Æ÷
{
TIM_Cmd(TIM3, DISABLE); //ê1ÄüTIMxíaéè
}
float Hcsr04GetLength(void )
{
u32 t = 0;
int i = 0;
float lengthTemp = 0;
float sum = 0;
while(i!=5)
{
//·¢Ëí¿ú¸ßμçƽêä3ö
TRIG_Send=1;
delay_ms(20);
TRIG_Send=0;
//delay_ms(20);
while (ECHO_Reci==0); //μè′y½óêÕ¿ú¸ßμçƽêä3ö
OpenTimerForHc(); //′ò¿a¶¨ê±Æ÷
i = i + 1;
while (ECHO_Reci==1);
CloseTimerForHc(); //1رն¨ê±Æ÷
t = GetEchoTimer(); //»ñè¡ê±¼ä,·Ö±æÂêÎa1US
lengthTemp = ((float)t/58.0f);//cm
sum = lengthTemp + sum ;
delay_ms(100);
}
lengthTemp = sum/5.0f;
return lengthTemp;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>