一、超声波测距模块简介(网络摘取)

HC-sr04是一款典型的超声波测距模块,升级版的程序和04的差别不大,只是测量范围和精度有所不同。

它是如何工作的?

超声波传感器使用声纳来确定到物体的距离。以下是其工作过程:

1.    发射器(触发引脚)发送信号:一段高频声音。

2.    当信号遇到一个物体时,它会被反射;

3.    然后发射器(回声引脚)接收该信号。

信号发送和接收之间的时间可以告知我们到物体的距离。这个是可以实现的,因为我们知道声音在空气中传播的速度。

传感器引脚图

●    VCC:+ 5VDC

●    Trig:触发(输入)

●    Echo:回声(输出)

●    GND:GND

二、CubeMX配置

任选两个GPIO,一个作为输入,一个作为输出。

在Project Manager -- Advanced Settings选项栏内,GPIO后面选择LL库。(忽略其他配置)

三、自动生成的代码

void MX_GPIO_Init(void)
{LL_GPIO_InitTypeDef GPIO_InitStruct = {0};/* GPIO Ports Clock Enable */LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB);/**/LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_12);/**/GPIO_InitStruct.Pin = LL_GPIO_PIN_12;GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;LL_GPIO_Init(GPIOB, &GPIO_InitStruct);/**/GPIO_InitStruct.Pin = LL_GPIO_PIN_13;GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING;LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

四、用户代码

1. <hcsr04.h>

/** hcsr04.h**  Created on: 2020年4月29日*      Author: zateper*/#ifndef INC_HCSR04_H_
#define INC_HCSR04_H_float HCSR04_GetLength(void);#endif /* INC_HCSR04_H_ */

2. <hcsr04.c>

#include "hcsr04.h"
#include "gpio.h"
#include "delay.h"
#include "usart.h"#define HCSR04_PORT     GPIOB
#define HCSR04_TRIG     LL_GPIO_PIN_12
#define ECHO_Reci  LL_GPIO_IsInputPinSet(HCSR04_PORT,LL_GPIO_PIN_13)void TRIG_pulse()
{LL_GPIO_SetOutputPin(HCSR04_PORT,HCSR04_TRIG);Delay_us(30);LL_GPIO_ResetOutputPin(HCSR04_PORT,HCSR04_TRIG);
}float HCSR04_GetLength(void)
{uint32_t startval,endval,tickn,ticknend,delayt;double delays;uint32_t timeout = 23530;//uSint i = 0;float lengthTemp = 0;float sum = 0;delays = 0;while(i!=5){TRIG_pulse();startval = SysTick->VAL;tickn = HAL_GetTick();while(ECHO_Reci == 0)      //等待接收口高电平输出{endval = SysTick->VAL;//读取系统滴答值ticknend = HAL_GetTick();if(ticknend == tickn){if(startval > endval){delayt = (startval - endval);}else//系统滴答进入下一毫秒{delayt = (startval +72000 - endval);}}else{delayt = ((ticknend - tickn) * 72000 + startval - endval);}if(delayt > 360000)//时间超时{printf("s%d,e%d;t%d,d%d\r\n",startval,endval,tickn,ticknend);return delayt;}}startval = SysTick->VAL;//跳出上一循环意味着Echo来了上升沿,读取此时滴答(时间)tickn = HAL_GetTick();i = i + 1;while(ECHO_Reci == 1){endval = SysTick->VAL;ticknend = HAL_GetTick();if(ticknend == tickn){if(startval > endval){delays = (startval - endval)/72.0;}else{delays = (startval +72000 - endval)/72.0;}}else{delays = ((ticknend - tickn) * 72000 + startval - endval)/72.0;}if(delays > timeout)//超时时间{printf("s%d,e%d;t%d,d%d\r\n",startval,endval,tickn,ticknend);return delays;}}endval = SysTick->VAL;//跳出上一循环意味着Echo来了下降沿,读取此时滴答(时间)ticknend = HAL_GetTick();delays = ((ticknend - tickn) * 72000 + startval - endval)/72;//计算时间差lengthTemp = ((float)delays/58.0);//单位cmsum = lengthTemp + sum ;}lengthTemp = sum/5.0;return lengthTemp;
}

此方法利用现成的SysTick计算时间差而没有使用硬件定时器,精度一样很高,适用于没有中断或者中断响应处理比较快的场景。同时加入了超时处理,避免while()死循环。

3. delay_us()

见:HAL库微秒us的延时Delay实现

4. 使用

float length;length = HCSR04_GetLength();
printf("距离为:%.3f\r\n",length);

STM32CubeIDE 利用LL库 SysTick简单实现hcsr04超声波测距相关推荐

  1. 利用PCL库做简单的三维立体图形

    利用PCL库画简单的三维立体图形需要知道各种图形的参数方程,然后给每个参数赋值便可以. 圆柱面的参数方程为:x = R*cos(θ); y = R*sin(θ); z = z;其中 θ范围是[-2*P ...

  2. 利用pcl库实现简单单帧障碍物检测

    利用pcl库实现简单单帧障碍物检测 #include <iostream> #include <pcl/common/common_headers.h> #include &l ...

  3. STM32单片机基于HAL库开发HC-SR04 超声波测距模块(终极版)

    参考: 某宝HC-SR04 超声波测距模块商品详情页 STM32L051C8T6 HAL库 输入捕获进行超声波测距 案例 STM32CubeMX学习笔记3--TIM2输入捕获(SR-04测距) cub ...

  4. 基于STM32F103C8T6(HAL库)的HC-SR501红外人体传感及HC-SR04超声波测距

    系列文章目录 一.基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁 二.基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发 三.实战 ...

  5. STM32—驱动HC-SR04超声波测距模块

    文章目录 超声波测距原理 HC-SR04工作原理 STM32实现驱动 1.引脚的配置 2.时序控制 3.时间差测量 4.如何将距离测出来 超声波测距原理 利用HC-SR04超声波测距模块可以实现比较精 ...

  6. STM32F103驱动HCSR04超声波测距显示

    STM32F103驱动HCSR04超声波测距显示 目录 超声波模块介绍 ①实物图 ②产品说明 ③电气参数 ④超声波工作原理 驱动代码 ①STM32配置初始化代码 ①超声波驱动应用代码 ②超声波距离计算 ...

  7. 学习并使用HC-SR04超声波测距模块+STM32

    ** 超声波测距原理 ** 参考博客: https://blog.csdn.net/qq_40734815/article/details/105992801 https://blog.csdn.ne ...

  8. 最简单的51超声波测距程序

    文章目录 前言 一.51超声波测距是什么? 二.使用步骤 1.引入库 2.读入数据 总结 前言 最简单的51超声波测距程序,注释相当详细,测量出来的值直接显示在数码管上,距离超过20cm就显示三个A, ...

  9. STM32F103—有关HC-SR04超声波测距模块的代码

    关于HC-SR04超声波测距模块(Trig和Echo的引脚可以自定义,我用的TRIG是PBout(11) ECHO是PBin(10)) 硬件连接: Vcc :5V输入(最好不要用3.3V输入) Tri ...

最新文章

  1. python 去除list 里面的重复元素
  2. 新趋势:工具赋能企业数字化转型,驱动组织升级!
  3. Fiddler抓取数据并分析(完整的配置教程)
  4. P1712-[NOI2016]区间【线段树,尺取法】
  5. 安装NTOP网络监控工具(wheezy)
  6. 计算机专业经典书籍强烈推荐
  7. matlab中load seamout,matlab中的save与load函数
  8. thinkphp5 接收layui上传的文件
  9. linux环境做路径左斜杠和右斜杠,不同操作系统下的路径分隔符—反斜杠与斜杠...
  10. WorkPlus助力“深i企”打造移动数字化底座
  11. tornodo异步请求
  12. TSE无线通信(铺垫)
  13. CTEX中文编辑问题
  14. python实现抢票github_面向回家编程!GitHub标星两万的”Python抢票教程”,我们先帮你跑了一遍...
  15. Unity的C#编程教程_61_委托和事件 Delegates and Events 详解及应用练习
  16. java模拟网易邮箱登录_使用服务端和客户端两种方法 模拟网易邮箱实现全选,全不选的功能...
  17. 小米mix2s支持html,小米MIX2S支持无线充电吗?米粉欢呼!
  18. Redis_保存数据时报错MISCONF Redis is configured to save RDB snapshots, but it is curren
  19. Oracle的DBMS_JOBS定时
  20. Zabbix监控华为交换机

热门文章

  1. 七个千僖年数学难题与希尔伯特二十三个问题
  2. 2021冬-不靠谱的老板-visa信用卡白paio两台服务器
  3. 模电——电路中电源地、模拟地、信号地的区别与联系
  4. 马云的“野心”,阿里的区块链布局
  5. 图解Transformer
  6. 数睿数据深度 | 中国软件网对话数睿数据总裁刘超:深挖数据驱动、企业级无代码
  7. 泛微OA 子表单中文本框设置默认值不显示的问题
  8. graph classification and drug discovery
  9. flutter 运行失败 The SDK directory 'xxxxx' does not exist.
  10. bzoj 4399 魔法少女LJJ