HC-SR04测距的显示数据不变

2019-07-14 13:09发布

#include "HC_SR04.h"
volatile float Distance=0.0f;

void Wave_SRD_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_AFIO_CLK_ENABLE();
        SRD_GPIO_CLK_ENABLE();

  GPIO_InitStruct.Pin = SRD_trig;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(SRD_GPIO_PORT, &GPIO_InitStruct);
        
        
        GPIO_InitStruct.Pin = SRD_echo;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(SRD_GPIO_PORT, &GPIO_InitStruct);

  HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}
static void SRD_Delay(uint16_t time)
{   
   u16 i=0;  
   while(time--)
   {
      i=10;  
      while(i--) ;   
   }
}
void Wave_SRD_Strat(void)
{
        HAL_GPIO_WritePin(SRD_GPIO_PORT,SRD_trig,GPIO_PIN_SET);
        SRD_Delay(50);            
        HAL_GPIO_WritePin(SRD_GPIO_PORT,SRD_trig,GPIO_PIN_RESET);
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    HAL_TIM_Base_Start_IT(&htimx);
    while(!HAL_GPIO_ReadPin(SRD_GPIO_PORT,SRD_echo));
                HAL_TIM_Base_Stop_IT(&htimx);
                Distance=(__HAL_TIM_GET_COUNTER(&htimx)+msHcCount*1000)*0.17;
                __HAL_TIM_SET_COUNTER(&htimx,0);
          msHcCount=0;
                MF_CLR_FLAG(SystemFlag,SYS_CheckSRD);        
                __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
}


*********************************************************************

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{

  msHcCount++        ;
        
}


*********************************************************************

#define __HAL_TIM_GET_COUNTER(__HANDLE__)
   ((__HANDLE__)->Instance->CNT)


*********************************************************************


Wave_SRD_Init();
*********************************************************************
Wave_SRD_Strat();//开始工作。



只显示0.17和0.34两个数据
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。