超声波测距模块距离错误且不变,有没有大神帮忙看看

2019-07-20 22:35发布

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#define Trig PCout(1)                //PC1        TRIG
/************************************************
ALIENTEK战舰STM32开发板实验10
输入捕获实验  
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司  
作者:正点原子 @ALIENTEK
************************************************/
void UltrasonicWave_Configuration(void);
void UltrasonicWave_StartMeasure(void);
void onemeasure(void);
extern u8  TIM5CH1_CAPTURE_STA;                //输入捕获状态                                                   
extern u16        TIM5CH1_CAPTURE_VAL;        //输入捕获值       
int main(void)
{               
         u32 temp=0;
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(115200);         //串口初始化为115200
        LED_Init();                             //LED端口初始化
UltrasonicWave_Configuration();
        TIM3_PWM_Init(899,0);                 //不分频。PWM频率=72000/(899+1)=80Khz
        TIM5_Cap_Init(0XFFFF,72-1);        //以1Mhz的频率计数
           while(1)
        {
               
                 UltrasonicWave_StartMeasure();
                if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次上升沿
                {
                        temp=TIM5CH1_CAPTURE_STA&0X3F;
                        temp*=65536;//溢出时间总和
                        temp+=TIM5CH1_CAPTURE_VAL;//得到总的高电平时间
                        printf("HIGH:%d cm ",temp*170/10000);//打印总的距离
                        TIM5CH1_CAPTURE_STA=0;//开启下一次捕获
                }
                 delay_ms(500);
        }
}

/*
* 函数名:UltrasonicWave_Configuration
* 描述  :超声波模块的初始化
* 输入  :无
* 输出  :无        
*/
void UltrasonicWave_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                                         //PC1接TRIG
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                     //设为推挽输出模式
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 
        GPIO_Init(GPIOC, &GPIO_InitStructure);                         //初始化外设GPIO

}

/*
* 函数名:UltrasonicWave_StartMeasure
* 描述  :开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间
* 输入  :无
* 输出  :无        
*/
void UltrasonicWave_StartMeasure(void)
{
        Trig = 1;
        delay_us(20);                                      //延时20US
        Trig = 0;
        delay_us(20);
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
SSNCDSS
1楼-- · 2019-07-21 04:04
顶顶顶求助
SSNCDSS
2楼-- · 2019-07-21 10:01
 精彩回答 2  元偷偷看……
SSNCDSS
3楼-- · 2019-07-21 15:26
 精彩回答 2  元偷偷看……
SSNCDSS
4楼-- · 2019-07-21 17:51
顶顶顶顶顶顶
aleda303
5楼-- · 2019-07-21 21:39
本帖最后由 aleda303 于 2019-7-10 00:34 编辑

硬件不一样,方案不一样, 不太好判断你的问题。
我把我的 给你参考下: 用的中断 + 计时器
  1. extern bool start_trig_measure;
  2. void EXTI15_10_IRQHandler(void)
  3. {
  4.         static bool en=false;
  5.         if(EXTI->GetITFlag(EXTIType::Line14))
  6.         {
  7.                 EXTI->ClearFlag(EXTIType::Line14) ;
  8.                 if (ULTRA_ECHO() == 0)   {
  9.                         if(start_trig_measure && en)    {
  10.                                 ultra_time = TIM2->CNT;                                
  11.                                 start_trig_measure =false;        
  12.                         }
  13.                         en = false;
  14.                 }
  15.                 else    {
  16.                         en = true;                        
  17.                         TIM2->CNT = 0;
  18.                 }
  19.                         
  20.                
  21.         }
  22. }
复制代码
  1. void Application::GetDistance()
  2. {
  3.         float          t = ultra_time / 500.0 ; //ms 获取时间参数,并计算距离。
  4.           //中间的一部分数据处理 去掉了 省略

  5.        //下面准备重新启动测量
  6.         ULTRA_TIRG(1);
  7.         delay_us(15);
  8.         ULTRA_TIRG(0);
  9.         delay_ms(60);
  10.         start_trig_measure=true;
  11. }
复制代码
plue
6楼-- · 2019-07-21 22:24
需要技术支持吗,可以联系我

一周热门 更多>