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_6

void 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.mfbz.cn/a/634617.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多商户消费券系统源码(ThinkPHP+FastAdmin+微信公众号)

打造智能促销新体验 一、引言:消费券系统的时代意义 在当今这个数字化高速发展的时代,电子商务和移动支付已经成为人们日常生活的重要组成部分。随着市场竞争的加剧,多商户消费券系统作为一种创新的促销手段,正逐渐受到商家和消…

安全工程师考试摸拟试题

安全工程师考试摸拟试题安全工程师是指在工程项目中负责安全管理和安全技术服务的专业人员。他们需要具备扎实的理论知识和丰富的实践经验,能够有效预防和控制各类安全风险… 1 安全工程师考试摸拟试题 安全工程师是指在工程项目中负责安全管理和安全技术服务的专业…

基于windows通过kind部署轻量级便携式k8s集群

感谢老师的视频教程: 基于windows通过kind部署轻量级便携式k8s集群 wsl windows下的linux wsl --set-default-version 2 wsl --help wsl --list --online wsl --install -d Ubuntu wsl -l -v (看看版本是不是2,否则docker那边识别不到&…

vite+ts+mock+vue-router+pinia实现vue的路由权限

0.权限管理 前端的权限管理主要分为如下: 接口权限路由权限菜单权限按钮权限 权限是对特定资源的访问许可,所谓权限控制,也就是确保用户只能访问到被分配的资源 1.项目搭建 创建vite项目 yarn create vite配置别名 npm install path -…

查看cpu

cpu是几核的怎么查看_windows查看cpu核数-CSDN博客文章浏览阅读1.4w次,点赞11次,收藏24次。cpu是几核的怎么查看_windows查看cpu核数https://blog.csdn.net/llg___/article/details/125317223?ops_request_misc&request_id&biz_id102&utm_t…

多模态大模型新进展——GPT-4o、Project Astra关键技术丨青源Workshop第27期

青源Workshop丨No.27 多模态大模型新进展—GPT-4o、Project Astra关键技术主题闭门研讨会 刚刚过去的两天,OpenAI、Google纷纷发布了多模态大模型的最新成果,GPT-4o、Project Astra先后亮相。 本周五(北京时间5月17日)18点&#x…

力扣1809 没有广告的剧集(postgresql)

需求 Table: Playback ----------------- | Column Name | Type | ----------------- | session_id | int | | customer_id | int | | start_time | int | | end_time | int | ----------------- 该表主键为:session_id (剧集id) customer_…

v-md-editor和SSE实现ChatGPT的打字机式输出

概述 不论是GPT还是文心一言,在回答的时候类似于打字机式的将答案呈现给我们,这样的交互一方面比较友好,另一方面,当答案比较多、生成比较慢的时候也能争取一些答案的生成时间。本文后端使用express和stream,使用SSE将…

WXML模板语法-数据绑定

1.数据绑定的基本原则 (1)在data中定义数据 (2)在WXML中使用数据 2.在data页面中定义数据:在页面对应的.js文件中,把数据定义在data对象中即可 (这里打错了 应该是数组类型的数据... 报意思啊) 3.Mustache语法的格式 把data中的…

容器组件:栅格布局,侧边栏容器(HarmonyOS学习第四课【4.5】)

栅格布局 栅格布局可以为布局提供规律性的结构,解决多尺寸多设备的动态布局问题,保证不同设备上各个模块的布局一致性。 栅格容器组件,仅可以和栅格子组件(GridCol)在栅格布局场景中使用。 说明 该组件从API Version 9开始支持。后续版本…

WordPress主题 7B2 PRO 5.4.2 免授权开心版源码

本资源提供给大家学习及参考研究借鉴美工之用,请勿用于商业和非法用途,无任何技术支持! WordPress主题 7B2 PRO 5.4.2 免授权开心版源码 B2 PRO 5.4.2 最新免授权版不再需要改hosts,和正版一样上传安装就可以激活。 直接在Word…

计算机精选期刊特辑

文章目录 一、征稿简介二、合作期刊三、投稿咨询四、咨询 一、征稿简介 艾思科蓝依托互联网信息与数据库技术、整合渠道与合作资源,提供EI/SCI/SCIE/SSCI期刊论文的内容审查、发表支持等服务。艾思科蓝与多所知名出版社达成战略合作关系,持续开展合作征…

【Unity】Rider无法调试团结引擎

近在学习unity,代码编辑器选择了熟悉的idea系列,C# 对应的编辑器 rider 之前在使用unity的时候,可以直接使用 Rider进行调试,很方便 但是后来又安装了团结引擎,在启动调试的时候断点总是无法激活 在点击调试按钮的时…

Vue文本溢出如何自动换行

css新增 word-break: break-all; word-wrap: break-word;

如何在没有密码或Face ID的情况下解锁iPhone

iPhone 是一款以其一流的安全功能而闻名的设备,包括面容 ID 和密码。但是,你有没有想过,如果没有这些安全措施,你是否可以解锁iPhone?无论您是忘记了密码,Face ID不起作用,还是只是对其他方法感…

浅析declval关键字

浅析 declval 关键字 文章目录 浅析 declval 关键字前言declval 的基本概念declval 的工作原理declval 的实际应用案例总结 前言 ​ 在现代C编程中,std::declval是一个非常有用的工具,它允许我们在不实例化对象的情况下使用其类型。这在模板元编程中尤其…

Git系列:git rm 的高级使用技巧

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

实用css整理

网页一键变灰 body{filter: grayscale(1); } 一般用于特殊时期,网页变灰,只需要给body标签添加这行样式代码。 一键换主题色 body {filter: hue-rotate(45deg);} 给body标签设置这个属性样式,改变角度看看效果吧。 设置字母大小写 p {t…

ESP32开发环境搭建Windows VSCode集成Espressif IDF插件开发环境搭建 IDF_V5.2.1

一、安装Visual Studio Code 下载地址:Download Visual Studio Code - Mac, Linux, Windows 打开上方链接,选择页面中的Windows版本,单击下载 将下载好的VSCodeUserSetup-x64-1.89.1.exe。单击右键,选择以管理员身份运行&#xf…

网络安全之BGP详解

BGP;边界网关协议 使用范围;BGP范围,在AS之间使用的协议。 协议的特点(算法):路径矢量型,没有算法。 协议是否传递网络掩码:传递网络掩码,支持VLSM,CIDR …