STM32控制HC-SR04超声模块获取距离

欢迎入群共同学习交流
时间记录:2024/5/23

一、模块介绍

(1)引脚介绍
VCC:电源引脚,接单片机3.3/5V
GND:电源地
Trig:超声信号触发引脚
Echo:超声信号接收引脚
(2)时序图
HC-SR04时序图
介绍:通过Trig触发引脚设置一个大于10us的TTL高电平,触发内部循环发送8个40KHZ的超声波,然后通过接收引脚判断接收信号高电平的持续时间,通过声速进行计算来回的距离,如果超过38ms仍未接收到回波也会触发高电平,此时电平持续时间最长

二、示例代码

(1)头文件

#ifndef __HCSR04_H__
#define __HCSR04_H__
#include "stm32f10x.h"/**HC-SR04超声模块初始化*/
void Hcsr04_Init(void);
/**获取距离,单位CM*/
void vGetDistance(float *dis,float temp);#endif

(2)源文件

#include "hc_sr04.h"
#include "delay.h"//端口宏定义
#define Tring_GPIO GPIOB
#define Tring_PIN  GPIO_Pin_5
#define Echo_GPIO GPIOB
#define Echo_PIN GPIO_Pin_6void Hcsr04_Init(void)
{//使能时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);/**初始化GPIO端口*/GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = Tring_PIN;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(Tring_GPIO,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = Echo_PIN;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(Echo_GPIO,&GPIO_InitStruct);/**初始化TIM2,进行计时*/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_Period=0xFFFF;TIM_TimeBaseInitStruct.TIM_Prescaler=72-1; //1us计数一次TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);TIM_Cmd(TIM2,ENABLE);//使能/开启定时器
}void vGetDistance(float *dis,float temp)
{u16 time = 0;/**Tring引脚拉高10us的TTL电平,使模块发送超声波*/GPIO_SetBits(Tring_GPIO,Tring_PIN);vDelayUs(10);GPIO_ResetBits(Tring_GPIO,Tring_PIN);/*获取回波时间,高电平持续时间38ms为无回波时返回时间*/while(GPIO_ReadInputDataBit(Echo_GPIO,Echo_PIN) == 0);TIM_SetCounter(TIM2,0);while(GPIO_ReadInputDataBit(Echo_GPIO,Echo_PIN) == 1);time = TIM_GetCounter(TIM2);//计算距离*dis = time*(334.1+0.6*temp) / 20000;vDelayMs(5); //等待下一次开始,官方建议60ms采样周期,自己根据情况修改
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

给你一把接口响应断言神器,你要不要?

JSON Schema是用来标记和校验JSON数据,类似于XMLSchema,可用在自动化测试验证JSON数据。 官网:http://json-schema.org/ 最常用版本:draft 04。(目前各类编程语言对draft 04支持最广泛) 举个例子 假如你有一个接口…

202473读书笔记|《但愿呼我的名为旅人:松尾芭蕉俳句300》——围炉夜话,身顿心安,愿每个人都能在爱里自由驰骋

202473读书笔记|《但愿呼我的名为旅人:松尾芭蕉俳句300》——围炉夜话,身顿心安,愿每个人都能在爱里自由驰骋 😍😍🤩🤩 译者序正文二正文三正文四正文五正文六正文七 《但愿呼我的名为旅人&…

智能进化:让AI大模型变得更聪明的路径探索

前言 随着人工智能(AI)技术的飞速发展,大模型在多个领域展现出了前所未有的能力。然而,它们仍然面临着理解力、泛化能力和适应性等方面的挑战。如何让大模型变得更聪明,是当前AI研究和应用的一个重要课题。本文将探讨…

解除网页禁止选择

控制台输入以下命令 复制:javascript:void(document.body.οncοpy) 可选:javascript:void(document.body.onselectstart) 拖拉:javascript:void(document.body.οnmοuseup)

C++实现基于http协议的epoll非阻塞模型的web服务器框架(支持访问服务器目录下文件的解析)

使用方法: 编译 例子:./httpserver 9999 ../ htmltest/ 可执行文件 端口 要访问的目录下的 例子:http://192.168.88.130:9999/luffy.html 前提概要 http协议 :应用层协议,用于网络通信,封装要传输的数据&…

npm install [Error]

npm install 依赖的时候报错 依赖版本问题的冲突,忽视即可 使用 npm install --legacy-peer-deps

剪画小程序:3个分离人声提取小技巧,赶紧收藏起来吧!

Hello!大家好呀!这里是社会主义搬砖人小画! 人声分离,是指将混合在一起的人声和其他声音(如背景音乐、环境噪音等)分离开来,提取出单独的人声部分的过程。 在实际应用中,人声分离技…

Unity 开发Hololens,制作面板跟随眼镜一起移动,(面板跟踪)

Hololens滑动框以及面板跟踪 创建空物体,并添加组件 SolverHandler、RedialView、FollowMeToggle 创建按钮,控制停止/开始跟踪 创建一个Hololens自带的按钮放到右上角,并添加事件 创建蓝色背景板 创建空物体Backplate,下面再…

个体因果效应估计|EDVAE:用于个体治疗效果估计的反事实推理中的解开潜在因素模型

【摘要】根据观察数据估计个体治疗效果(ITE)是一项至关重要但具有挑战性的任务。解缠结表示已用于将代理变量分为混杂变量、工具变量和调整变量。然而,根据观测数据准确地进行反事实推理来识别 ITE 仍然是一个悬而未决的问题。在本文中&#…

AppInventor2要在界面上做一个电量图标,有什么好的思路吗?

问:要在界面上做一个电量图标,有什么好的思路吗? 答:首先,很容易想到使用进度条相关的组件,原生”滑动条“组件可以吗? 答案显而易见,首先它的样式自定义不够,UI不外乎上…

STM32_ADC

1、ADC简介 ADC,即Analog-Digital Converter,模拟-数字转换器。 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。 12位逐次逼近型ADC,1us转换时间。 输入电压范围:0~3.3…

P6【力扣144,94,145】【数据结构】【二叉树遍历】C++版

【144】二叉树的前序遍历 1、递归法&#xff1a; class Solution { public:void preorder(TreeNode* root, vector<int> &res){if(root nullptr){return;}res.push_back(root->val);preorder(root->left, res);preorder(root->right, res);}vector<in…

CVE-2020-7982 OpenWrt 远程命令执行漏洞学习(更新中)

OpenWrt是一款应用于嵌入式设备如路由器等的Linux操作系统。类似于kali等linux系统中的apt-get等&#xff0c;该系统中下载应用使用的是opgk工具&#xff0c;其通过非加密的HTTP连接来下载应用。但是其下载的应用使用了SHA256sum哈希值来进行检验&#xff0c;所以将下载到的数据…

weblogic简介

WebLogic是美国Oracle公司出品的一个Application Server&#xff0c;它是一个基于JAVA EE架构的中间件。WebLogic主要用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。它将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的…

什么是安全左移如何实现安全左移

文章目录 一、传统软件开发面临的安全挑战二、什么是安全左移四、安全左移与安全开发生命周期&#xff08;SDL&#xff09;三、安全左移对开发的挑战五、从DevOps到DevSecOps六、SDL与DevSecOps 一、传统软件开发面临的安全挑战 传统软件开发面临的安全挑战主要包括以下几个方…

抄表:现代生活中的数据采集关键

1.界定与发源 抄表&#xff0c;简单的说&#xff0c;指从各种各样计量机器设备(如智能水表、电度表、天然气表等)载入做好记录使用量的全过程。这一概念自工业化时代至今就出现了&#xff0c;最初由人工进行&#xff0c;伴随着科技创新&#xff0c;如今已经演化出自动化和远程…

服务端Web资源缓存

1.前言 虽然客户端缓存效果很好&#xff0c;但它有一个核心问题&#xff1a;要在本地提供资源&#xff0c;必须先将其存储在缓存中。因此&#xff0c;每个客户端都需要其缓存的资源。如果请求的资源需要大量计算&#xff0c;则无法扩展。服务器端缓存背后的理念是计算一次资源…

第10章 软件架构的演化和维护

软件架构周期&#xff1a;初始设计、实际使用、修改完善(这就是演化)、退化弃用。 演化和维护的目的&#xff1a;为了使软件能够适应环境的变化而进行的纠错性修改和完善性修改等&#xff0c;而且这个过程是一个不断迭代的过程。 架构演化的重要性、演化过程、演化分类、演化…

Java——通过方法交换实参值

想写一个方法来交换main函数中的两个变量值&#xff0c;代码如下&#xff1a; public class Test {public static void swap(int x,int y) {int tmp x;x y;y tmp;}public static void main(String[] args) {int a 10;int b 20;System.out.println("交换前&#xff1…

Autodesk Maya 2025软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; Autodesk Maya 2025是一款领先的三维动画设计软件&#xff0c;界面直观且功能丰富。它集成了全球领先的3D设计技术&#xff0c;提供了多种创意功能&a…