OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4894|回复: 9

超声波HC-SR04

[复制链接]

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-12-19
在线时间
17 小时
发表于 2017-12-19 20:49:37 | 显示全部楼层 |阅读模式
2金钱
最近在学习超声波,看了网上对超声波模块HC-SR04的介绍自己写了好久的代码可是一直没有成功,求一个超声波测距的代码,或者有大神可以指出我这里写的代码有什么问题为什么不能实现测距。我用的是STM32F429的板子。

超声波.zip

11.54 MB, 下载次数: 275

这是我自己写的代码

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
484
金钱
484
注册时间
2017-11-6
在线时间
162 小时
发表于 2017-12-21 09:25:59 | 显示全部楼层
void sr04_init(void)
{
        GPIO_InitTypeDef GPIO_InitStruct;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
       
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;    //推挽输出
        GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
       
  GPIO_Init(GPIOB, &GPIO_InitStruct);               
        GPIO_SetBits(GPIOB, GPIO_Pin_13);
       
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOB, &GPIO_InitStruct);               

       
       
       
}


void send_ultrasonic()
{
     TRIG_UP;
         delay_us(20);
         TRIG_DOWN;
}       




u8 overcount;
float Get_Distance(void)       
{
         u8 i;
         u16 tim;
         float distance = 0.0f;
         for(i=0;i<5;i++)
         {
                 TRIG_UP;
                 delay_us(20);
                 TRIG_DOWN;
               
                 while(!ECHO);  //等待返回信号
                 TIM_SetCounter(TIM3,0);
                 TIM_Cmd(TIM3,ENABLE);   //开启定时器

                 while(ECHO);
                 TIM_Cmd(TIM3,DISABLE);
                 tim=TIM3->CNT;
                 distance+=(tim+overcount*1000)/58;
                 TIM3->CNT = 0;
                 overcount = 0;
                 delay_ms(100);
                }
                return distance/5;
               
}

void TIM3_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
        {
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
        overcount++;
        }
}


以前项目用到过 这个代码应该是可以用的
回复

使用道具 举报

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-12-19
在线时间
17 小时
 楼主| 发表于 2017-12-21 19:17:12 | 显示全部楼层
spica 发表于 2017-12-21 09:25
void sr04_init(void)
{
        GPIO_InitTypeDef GPIO_InitStruct;

谢谢  我试一下
回复

使用道具 举报

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-12-19
在线时间
17 小时
 楼主| 发表于 2017-12-21 19:50:45 | 显示全部楼层
spica 发表于 2017-12-21 09:25
void sr04_init(void)
{
        GPIO_InitTypeDef GPIO_InitStruct;

刚刚试了一下 结果还是一样  示波器查了一下发现T口 只有在接上的一个周期里才会出现20ms的高电平  我把程序发给你 你可以帮我看一下吗   或者可以加一下qq1931425626
回复

使用道具 举报

5

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-5-25
在线时间
86 小时
发表于 2017-12-26 09:36:08 | 显示全部楼层
很简单吧  我有103的
笑着熬下去@_@
回复

使用道具 举报

0

主题

113

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3321
金钱
3321
注册时间
2017-12-14
在线时间
406 小时
发表于 2017-12-26 09:55:27 | 显示全部楼层
连个等待时间都没有,我也是醉了
回复

使用道具 举报

4

主题

52

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2014-2-20
在线时间
27 小时
发表于 2017-12-26 11:47:38 | 显示全部楼层
首先把程序结构整理好,你少一个分号整个逻辑就不对了。
GPIO_SetBits(GPIOB,GPIO_Pin_6);                       
        delay_ms(20);  
        GPIO_ResetBits(GPIOB,GPIO_Pin_6);  
        while(ECHO_Reci == 0)      //等待接收口高电平输出  
            OpenTimerForHc();        //打开定时器  
            i = i + 1;  
            while(ECHO_Reci == 1);  
            CloseTimerForHc();        //关闭定时器  
            t = GetEchoTimer();        //获取时间,分辨率为1US  
            lengthTemp = ((float)t/58.0f);//cm  
            sum = lengthTemp + sum ;
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-30
在线时间
5 小时
发表于 2017-12-27 18:54:57 | 显示全部楼层
jeff_梁 发表于 2017-12-26 09:36
很简单吧  我有103的

可以给我下吗?
回复

使用道具 举报

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-12-19
在线时间
17 小时
 楼主| 发表于 2018-1-6 10:43:41 | 显示全部楼层
jeff_梁 发表于 2017-12-26 09:36
很简单吧  我有103的

可以给我看一下吗
回复

使用道具 举报

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-12-19
在线时间
17 小时
 楼主| 发表于 2018-1-6 10:44:23 | 显示全部楼层
feichangkunge 发表于 2017-12-26 09:55
连个等待时间都没有,我也是醉了

我是个新手 求指教
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-19 22:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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