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

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条回答
迅得电子
2019-07-22 08:27
整理一下楼主的代码
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "timer.h"
  7. #define Trig PCout(1)                //PC1        TRIG
  8. /************************************************
  9. ALIENTEK战舰STM32开发板实验10
  10. 输入捕获实验  
  11. 技术支持:www.openedv.com
  12. 淘宝店铺:http://eboard.taobao.com
  13. 关注微信公众平台微信号:"正点原子",免费获取STM32资料。
  14. 广州市星翼电子科技有限公司  
  15. 作者:正点原子 @ALIENTEK
  16. ************************************************/
  17. void UltrasonicWave_Configuration(void);
  18. void UltrasonicWave_StartMeasure(void);
  19. void onemeasure(void);
  20. extern u8  TIM5CH1_CAPTURE_STA;                //输入捕获状态                                                   
  21. extern u16        TIM5CH1_CAPTURE_VAL;        //输入捕获值        
  22. int main(void)
  23. {               
  24.          u32 temp=0;
  25.         delay_init();                     //延时函数初始化         
  26.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  27.         uart_init(115200);         //串口初始化为115200
  28.         LED_Init();                             //LED端口初始化
  29. UltrasonicWave_Configuration();
  30.         TIM3_PWM_Init(899,0);                 //不分频。PWM频率=72000/(899+1)=80Khz
  31.         TIM5_Cap_Init(0XFFFF,72-1);        //以1Mhz的频率计数
  32.            while(1)
  33.         {
  34.                
  35.                  UltrasonicWave_StartMeasure();
  36.                 if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次上升沿
  37.                 {
  38.                         temp=TIM5CH1_CAPTURE_STA&0X3F;
  39.                         temp*=65536;//溢出时间总和
  40.                         temp+=TIM5CH1_CAPTURE_VAL;//得到总的高电平时间
  41.                         printf("HIGH:%d cm ",temp*170/10000);//打印总的距离
  42.                         TIM5CH1_CAPTURE_STA=0;//开启下一次捕获
  43.                 }
  44.                  delay_ms(500);
  45.         }
  46. }

  47. /*
  48. * 函数名:UltrasonicWave_Configuration
  49. * 描述  :超声波模块的初始化
  50. * 输入  :无
  51. * 输出  :无        
  52. */
  53. void UltrasonicWave_Configuration(void)
  54. {
  55.         GPIO_InitTypeDef GPIO_InitStructure;

  56.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

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

  61. }

  62. /*
  63. * 函数名:UltrasonicWave_StartMeasure
  64. * 描述  :开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间
  65. * 输入  :无
  66. * 输出  :无        
  67. */
  68. void UltrasonicWave_StartMeasure(void)
  69. {
  70.         Trig = 1;
  71.         delay_us(20);                                      //延时20US
  72.         Trig = 0;
  73.         delay_us(20);
  74. }
复制代码

一周热门 更多>