OpenEdv-开源电子网

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

stm32f429阿波罗超声波测距怎么搞

[复制链接]

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2020-10-2
在线时间
20 小时
发表于 2020-11-28 20:48:36 | 显示全部楼层 |阅读模式
求一份阿波罗stm32f429的超声波测距的程序,用输入捕获(同时借鉴了网上的方法)搞了几天了都搞不出来,希望有大佬解惑
超声波.c程序
#include "UltrasonicWave.h"
#include "usart.h"
#include "delay.h"
#include "sys.h"


//描述  :超声波模块的初始化       
void trig_init(void)
{
       
    GPIO_InitTypeDef GPIO_Initure;
    __HAL_RCC_TIM5_CLK_ENABLE();
    __HAL_RCC_GPIOH_CLK_ENABLE();           //使能GPIOH时钟
       
        GPIO_Initure.Pin=GPIO_PIN_7; //PH7 echo
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP        ;  //
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
    HAL_GPIO_Init(GPIOH,&GPIO_Initure);       
}

void trig(void)
{
        trig_pin=1;
        delay_ms(20);
        trig_pin=0;
}
超声波.h的
#ifndef __UltrasonicWave_H
#define        __UltrasonicWave_H

#define trig_pin PAout(0)        // Trig
               
void trig_init(void);//初始化
void trig(void);
#endif

主程序
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "UltrasonicWave.h"

extern u8  TIM5CH1_CAPTURE_STA;                //输入捕获状态                                                   
extern u32        TIM5CH1_CAPTURE_VAL;        //输入捕获值


int main(void)
{
        long long length=0;
    long long temp=0;
        HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);//中断优先级分组2       
    HAL_Init();                             //初始化HAL库   
    Stm32_Clock_Init(360,25,2,8);           //设置时钟,180Mhz
    delay_init(180);                                //初始化延时函数
    uart_init(115200);                             //初始化USART
   
    TIM5_CH1_Cap_Init(0XFFFFFFFF,90-1); //以1MHZ的频率计数
        trig_init();
    while(1)
    {
               
                trig();
               
    if(TIM5CH1_CAPTURE_STA&0X80)        //成功捕获到了一次高电平
                {
                        temp=TIM5CH1_CAPTURE_STA&0X40;
                        temp*=0XFFFFFFFF;                             //溢出时间总和
                        temp+=TIM5CH1_CAPTURE_VAL;      //得到总的高电平时间
                        length=temp/340/2;
                        printf("HIGH:%lld cm\r\n",length);//打印总的高点平时间
                        delay_ms(300);
                        TIM5CH1_CAPTURE_STA=0;          //开启下一次捕获
                }
    }
}

timer.c的程序是原子哥的程序,只是去掉了TIM3的部分

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

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10561
金钱
10561
注册时间
2017-2-18
在线时间
1912 小时
发表于 2020-11-30 15:14:18 | 显示全部楼层
回复 支持 1 反对 1

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2020-10-2
在线时间
20 小时
 楼主| 发表于 2020-11-30 19:09:38 | 显示全部楼层
peng1554 发表于 2020-11-30 15:14
看可以参考不
http://www.openedv.com/forum.php?mod=viewthread&tid=109060&highlight=%B3%AC%C9%F9%B2%A ...

我就是参考的这位大佬的资料
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2020-10-2
在线时间
20 小时
 楼主| 发表于 2020-12-1 19:05:43 | 显示全部楼层
peng1554 发表于 2020-11-30 15:14
看可以参考不
http://www.openedv.com/forum.php?mod=viewthread&tid=109060&highlight=%B3%AC%C9%F9%B2%A ...

已解决,谢谢
回复 支持 反对

使用道具 举报

0

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2020-4-14
在线时间
36 小时
发表于 2020-12-9 19:48:36 | 显示全部楼层
peng1554 发表于 2020-11-30 15:14
看可以参考不
http://www.openedv.com/forum.php?mod=viewthread&tid=109060&highlight=%B3%AC%C9%F9%B2%A ...

点错了,学习
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-6-8
在线时间
3 小时
发表于 2021-5-28 16:57:14 | 显示全部楼层
请问怎么解决的,能发一个源代码吗,有点急需,谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 17:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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