#include "HC_SR04.h"
vola
tile 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两个数据