关于HCSR04超声波模块的精度问题

2019-07-20 16:41发布

我不知道是不是程序写错了。
发回来的输出,在7cm以内是都能正确识别的,然后当障碍物超过7cm后,就一直显示7cm了,不知道为什么,求助啊。

程序如下:
#include "sys.h"
#include "delay.h"  
#include "usart.h"  
#include "led.h"
#include "timer.h"
//ALIENTEK 探索者STM32F407开发板 实验10
//输入捕获实验  
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司

extern u8  TIM5CH1_CAPTURE_STA;                //输入捕获状态                                                   
extern u32        TIM5CH1_CAPTURE_VAL;        //输入捕获值  
int main(void)
{  
        long long temp=0;  
        u8 dis;
        Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz
        delay_init(168);                        //延时初始化   
        uart_init(84,115200);                //初始化串口波特率为115200
        //TIM14_PWM_Init(1000-1,168-1);        //1Mhz的计数频率,1Khz的PWM.     
        TIM5_CH1_Cap_Init(0XFFFFFFFF,84-1);//以1Mhz的频率计数
       
        RCC->AHB1ENR|=1<<5;           //使能PORTF时钟       
        GPIO_Set(GPIOF,PIN6,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PD);//复用功能,下拉输出
       
           while(1)
        {
                //LED0_PWM_VAL=0;
                //delay_ms(10);
                //LED0_PWM_VAL=40;
                //delay_ms(1);
                //LED0_PWM_VAL=0;
                PFout(6)=0;
                delay_ms(20);
                PFout(6)=1;
                delay_us(10);
                PFout(6)=0;
               
                while(!(TIM5CH1_CAPTURE_STA&0X80));       //等到捕获一次高电平
                //if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次高电平
                //{
                        temp=TIM5CH1_CAPTURE_STA&0X3F;
                        temp*=0XFFFFFFFF;                                 //溢出时间总和
                        temp+=TIM5CH1_CAPTURE_VAL;                //得到总的高电平时间
                        printf("HIGH:%lld us ",temp);             //打印总的高点平时间
                        dis=temp*340*100/2000000;                        //cm
                        printf("DIS:%d cm ",dis);
                        TIM5CH1_CAPTURE_STA=0;                        //开启下一次捕获
                        delay_ms(189);
                //}
               
        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。