野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7985|回复: 0

超声波测距没反应

[复制链接]
发表于 2022-3-19 15:18:56 | 显示全部楼层 |阅读模式
#include "hc_sr04.h"
#include "bsp_systick.h"
#include "usart.h"

#define        TRIG_PORT      GPIOB                //定义TRIG_PORT为PB     
#define        ECHO_PORT      GPIOB                //定义ECHO_PORT为PB
#define        TRIG_PIN       GPIO_Pin_0   //定义TRIG 对应IO口 PB0      
#define        ECHO_PIN       GPIO_Pin_1        //定义ECHO 对应IO口 PB1  


/**
  * @brief  用于定时计算高电平时间
  * @param   无  将定时器6设置为1us记一次数,3000us=3ms一个周期 再测量范围内能满足要求
  * @retval  无
  */
static void TIM6_Counter(void)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructer;
        RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM6,ENABLE);        //打开定时器时钟
        TIM_TimeBaseInitStructer.TIM_ClockDivision=TIM_CKD_DIV1 ;
        TIM_TimeBaseInitStructer .TIM_Prescaler=71;
        TIM_TimeBaseInitStructer.TIM_Period=3000;
        TIM_TimeBaseInit (TIM6,&TIM_TimeBaseInitStructer );
        TIM_Cmd (TIM6,DISABLE );//先关闭定时器,计算距离时再打开
}


/*
* 函数名:UltrasonicWave_Configuration
* 描述  :超声波模块的初始化
*/
void UltrasonicWave_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructer;//定义相关初始化的结构体
        EXTI_InitTypeDef EXTI_InitStructer;
        NVIC_InitTypeDef NVIC_InitStructer;
       
       
        RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB ,ENABLE);//打开相应的时钟
        //配置相关引脚
        GPIO_InitStructer.GPIO_Pin = TRIG_PIN;//超声波触发引脚
        GPIO_InitStructer.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructer.GPIO_Speed = GPIO_Speed_50MHz ;
        GPIO_ResetBits(TRIG_PORT,TRIG_PIN);//先暂时复位超声波触发引脚,防止误发
        GPIO_Init(TRIG_PORT,&GPIO_InitStructer);
       
        GPIO_InitStructer.GPIO_Pin = ECHO_PIN;//回收高电平引脚
        GPIO_InitStructer.GPIO_Mode = GPIO_Mode_IN_FLOATING;//输入模式
        GPIO_Init(ECHO_PORT,&GPIO_InitStructer);
       
        //对中断进行相关的配置
        NVIC_PriorityGroupConfig (NVIC_PriorityGroup_1 );
        NVIC_InitStructer .NVIC_IRQChannel = EXTI1_IRQn ;
        NVIC_InitStructer .NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructer .NVIC_IRQChannelPreemptionPriority = 2;
        NVIC_InitStructer .NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init (&NVIC_InitStructer );//初始化NVIC
       
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);//进行中断线以及中断初始化配置
        EXTI_InitStructer .EXTI_Line = EXTI_Line1 ;//选择中断/事件线
        EXTI_InitStructer .EXTI_Mode = EXTI_Mode_Interrupt ;//配置为中断模式
        EXTI_InitStructer .EXTI_Trigger = EXTI_Trigger_Rising ;//上升沿触发
        EXTI_InitStructer .EXTI_LineCmd = ENABLE;//使能外部中断
        EXTI_Init (&EXTI_InitStructer );//外部中断初始化
}

/**
  * @brief   开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间
  * @param   无
  * @retval  无
  */
void UltrasonicWave_StartMeasure(void)
{
  GPIO_SetBits(TRIG_PORT,TRIG_PIN);                   //送>10US的高电平
  Delay_us(11);        //延时11US
  GPIO_ResetBits(TRIG_PORT,TRIG_PIN);          
}

/**
  * @brief   中断处理服务函数,计算高电平持续的时间,从而计算距离
  * @param   无
  * @retval  无
  */
void EXTI1_IRQnHeader(void)
{
        int count;
        TIM6_Counter();
        TIM_Cmd(TIM6,ENABLE);
        if(EXTI_GetITStatus (EXTI_Line1 )!=RESET )
        {
                TIM_Cmd(TIM6,ENABLE);
                TIM_SetCounter (TIM6 ,0 );
                count=1;
                while(count)//等待低电平
                {
                        if(TIM_GetCounter (TIM6)>=1000)
                        {
                                TIM_Cmd(TIM6, DISABLE);         // 关闭时钟 Tim6
                                count=0;                                        // 循环数清零
                        }
                        else count=GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN );
                }
                TIM_Cmd (TIM6,DISABLE );
        }
        EXTI_ClearITPendingBit (EXTI_Line1 );
}

float  HCSR04_GetDisatnce(void)
{
        float distance;
        UltrasonicWave_StartMeasure();
        Delay_ms(1000);
        printf("%d",TIM_GetCounter(TIM6));
        distance=(1.7*(TIM_GetCounter (TIM6)));//计算出来的单位为cm
        if(distance>=450)//超出测量范围
        {
                printf("it is erro");
        }
        return distance;       
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 02:56 , Processed in 0.026131 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表