当前位置: 首页 > news >正文

超声波模块HC_SR04(hal库)

超声波模块HC_SR04

原理

1.触发信号:拉高至少10us的高电平

2.回响信号处理:计算高电平时长 

3.计算距离:时间*速度(声速)/2(注意单位问题)

代码实现

方法1.下拉输入

配置

用于延时微秒us和计算时长

Delay_us微秒延时函数

定时器延时us(hal库)-CSDN博客

配置gpio

推挽输出和下拉输入

 

默认输出低电平

下拉输入

参考代码

hcsr_04.h

#ifndef __hcsr_04_H__
#define __hcsr_04_H__#include "main.h"#define HCSR_04_Trig_SET  		HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_SET)
#define HCSR_04_Trig_RESET		HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_RESET)void HCSR_04_Trig_Start(void);
float HCSR_04_Get_Distance_cm(void);#endif

hcsr_04.c

#include <hcsr_04.H>             // 包含 HCSR-04 传感器的头文件
#include "delay_us.h"            // 包含微秒级延时的头文件extern TIM_HandleTypeDef htim1; // 声明外部定时器句柄// 启动 HCSR-04 的 Trigger 脉冲
void HCSR_04_Trig_Start()
{HCSR_04_Trig_SET;            // 设置 Trigger 引脚为高电平Delay_us(20);                // 延时 20 微秒HCSR_04_Trig_RESET;          // 将 Trigger 引脚设置为低电平
}// 获取距离值,单位为厘米
float HCSR_04_Get_Distance_cm(void)
{float count = 0;            // 用于存储计数值float distance_cm = 0;      // 用于存储计算得到的距离值HCSR_04_Trig_Start();       // 启动 Trigger 脉冲while(HAL_GPIO_ReadPin(Echo_GPIO_Port, Echo_Pin) == GPIO_PIN_RESET){}; // 等待 Echo 引脚变高电平__HAL_TIM_SetCounter(&htim1, 0);      // 清空定时器计数值HAL_TIM_Base_Start(&htim1);          // 启动定时器while(HAL_GPIO_ReadPin(Echo_GPIO_Port, Echo_Pin)){}; // 等待 Echo 引脚变低电平HAL_TIM_Base_Stop(&htim1);           // 停止定时器count = __HAL_TIM_GetCounter(&htim1); // 获取定时器的计数值distance_cm = count * 340 / 2 * 0.000001 * 100; // 计算距离,单位为厘米return distance_cm;                 // 返回计算得到的距离值
}

测试

    OLED_Init();			OLED_Clear(0); float Distance_cm = 0;char str[128] = "printf";OLED_ShowString(0,0,(uint8_t *)str,16);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){HAL_Delay(1000);Distance_cm = HCSR_04_Get_Distance_cm();sprintf(str,"Distance_cm=%f",Distance_cm);OLED_ShowString(0,0,(uint8_t *)str,16);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}

方法2.输入捕获

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【图像超分】论文精读:AdaBM: On-the-Fly Adaptive Bit Mapping for Image Super-Resolution
  • 向量数据库中的PQ(Procduct Quantization)
  • zabbix通过snmp监控物理服务器硬件信息
  • Win10安装ChatTTS-2024-cuda10.1
  • 数据结构预备知识
  • 链表反转算法
  • 12.2 使用prometheus-sdk向pushgateway打点
  • Unity编辑器扩展:创建一个欢迎窗口,在启动Editor的时候显示自定义窗口。
  • 【信息学奥赛一本通】1008:计算(a+b)/c的值
  • easypoi模板导出word多页导出加强版
  • 5 分钟 Stable Diffusion 本地安装指南
  • Android14 蓝牙设备类型修改
  • 本地Docker部署Navidrome音乐服务器与远程访问听歌详细教程
  • 根据状态的不同,显示不同的背景颜色
  • 数据库学习
  • JavaScript 如何正确处理 Unicode 编码问题!
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CentOS 7 修改主机名
  • Golang-长连接-状态推送
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • mysql innodb 索引使用指南
  • PAT A1120
  • react 代码优化(一) ——事件处理
  • vue自定义指令实现v-tap插件
  • 使用 @font-face
  • 突破自己的技术思维
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 自制字幕遮挡器
  • 整理一些计算机基础知识!
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • #java学习笔记(面向对象)----(未完结)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (笔记)M1使用hombrew安装qemu
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (一)插入排序
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .gitignore文件使用
  • .Net 8.0 新的变化
  • .net web项目 调用webService
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • []C/C++读取串口接收到的数据程序
  • [2021 蓝帽杯] One Pointer PHP
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [C/C++]数据结构 深入挖掘环形链表问题
  • [Delphi]一个功能完备的国密SM4类(TSM4)[20230329更新]
  • [dts]Device Tree机制