超声波测距模块HC-SR04(基于STM32F103C8T6HAL库)

超声波测距模块参考资料

1.电路连接及引脚配置

触发信号PA3只需要输出10us的高电平,所以直接设置成 普通的GPIO端口即可;回响信号使用外部中断,上升沿信号产生外部中断,打开定时器,下降沿再产生一次中断,读取定时器的值,就是高电平的时间,测试距离=(高电平时间*声速(340M/S))/2。

调试引脚配置:

配置时钟:

GPIO配置: 

打开中断: 

 定时器设置:配置成最基本的定时器即可

\frac{HCLK}{PCS+1}=\frac{72MHz}{71+1}=1MHz

PSC设置为72时候就是没过1us定时器里面的计数值就加1,我们的计数器是16位的,就是最大可以计数到65535,那我这个定时器最大可以计时到65535us,即0.065535s。所以最大测距范围为:\frac{0.065535\times340}{2}=11.14095m,远远大于这款超声波测距模块的测距范围。

除此之外,我们要设置一下I2C给OLED显示屏使用,用于显示测量值:

2.驱动文件编写

(1)添加两个文件sr04.c和sr04.h

(2)sr04. h

#ifndef _SR04_H
#define _SR04_H#include "stm32f1xx_hal.h"void GET_Distance(void);#endif

(3)sr04.c,超声波测距实现

#include "sr04.h"uint16_t count;
float distance;
extern TIM_HandleTypeDef htim3;/*指令耗时计算延时函数:
在程序里执行若干条空指令,来达到延时效果*/
void RCCdelay_us(uint32_t udelay)
{__IO uint32_t Delay = udelay * 72 / 8;//(SystemCoreClock / 8U / 1000000U)//见stm32f1xx_hal_rcc.c -- static void RCC_Delay(uint32_t mdelay)do{__NOP();}while (Delay --);
}/*测距模块触发信号函数*/
void GET_Distance(void)
{HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);RCCdelay_us(12);                                          HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);    //触发引脚电平拉高12us输出触发信号
}/*中断服务函数,计数定时,解算测量距离*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_2)==GPIO_PIN_SET)  //上升沿中断{__HAL_TIM_SetCounter(&htim3,0);     //定时器清零HAL_TIM_Base_Start(&htim3);         //定时器开始计时}else                                    //下降沿触发中断{HAL_TIM_Base_Stop(&htim3);          //定时器停止计时count=__HAL_TIM_GetCounter(&htim3); //读取定时器计数值distance=count*0.017;               //测试距离:((count/1000000)*340/2)*100,单位CM}
}

(4)main.c

主函数里直接在直接调用GET_Distance()即可。

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

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

相关文章

数据丢失?别慌!EasyRecovery带你轻松寻回!

🌟 意外总在不经意间降临 🌟 亲爱的小伙伴们,你是否有过这样的经历:正专心致志地处理着电脑文件,突然一次误操作,重要的资料就这样不见了,那种心如刀绞的感觉瞬间涌上心头。😖 使用…

MySQL事务【后端 13】

MySQL事务 在数据库管理系统中,事务(Transaction)是一个非常重要的概念,它确保了数据库操作的完整性和一致性。MySQL作为一种流行的关系型数据库管理系统,自然也支持事务处理。本文将深入探讨MySQL事务的基本概念、特性…

StorageSync数据缓存API

uni.setStorageSyncs参数:将 data 存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。 uni.setStorageSync函数里面写两个参数,分别是key和值,两个参数名称可以随便取,如果有同名的key,那么后面key的值会覆盖掉前面key的值…

毫欧表设计整体思路

原因 对于焊接设备的低阻值测量,一般都是mΩ级别的,但万用表的电阻档一般都是以200Ω做为最小档位 设计原理及软件实现设计 设计思路原理图 通过串联在电路中的电流相等,根据阻值和电压的关系得到电阻对应大小 设计中需要考虑的问题 1…

Why I‘m getting 404 Resource Not Found to my newly Azure OpenAI deployment?

题意:为什么我新部署的Azure OpenAI服务会出现404资源未找到的错误? 问题背景: Ive gone through this quickstart and I created my Azure OpenAI resource created a model deployment which is in state succeedded. I also playaround …

【C++ Primer Plus习题】14.3

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include "queuetp.h&quo…

JavaWeb后端开发总结(3)

AOP基础 AOP概述 首先我们要知道AOP是什么&#xff1f; 看下图 个人解析&#xff1a; AOP叫做面向切面编程&#xff0c;但是实际上就是面向方法编程 图中下面一部分是一个AOP的案例 AOP快速入门案例代码实现 案例&#xff1a;测出业务中各个业务方法所需的执行时间 如果…

进程与计划任务

top 查看进程 x users 表示有几个shell开启 x stopped 前台任务在后台暂停firefox & 在后台运行&#xff0c;不在前面显示 ​​​​​​​这种方式常用于需要长时间运行且不需要即时交互的程序或命令&#xff0c;以便用户可以在终端中使用其他命令或进行其他操作&#…

Linux平台屏幕|摄像头采集并实现RTMP推送两种技术方案探究

技术背景 随着国产化操作系统的推进&#xff0c;市场对国产化操作系统下的生态构建&#xff0c;需求越来越迫切&#xff0c;特别是音视频这块&#xff0c;今天我们讨论的是如何在linux平台实现屏幕|摄像头采集&#xff0c;并推送至RTMP服务。 我们知道&#xff0c;Linux平台&…

debug对于开发工程师很重要

在日常开发中&#xff0c;总会遇到一些出人意料的bug&#xff0c;程序跑飞&#xff0c;上电就挂&#xff0c;程序没有按预期执行诸如此类的问题&#xff0c;没有好的调试方法&#xff0c;真的很难定位问题&#xff0c;更别说解决了。在这里分享我用过的一些调试方法&#xff0c…

“论剑”智算时代,长沙已经站在计算产业的“华山之巅”

文 | 智能相对论 作者 | 陈泊丞 共赴全新十年之约&#xff0c;长沙又来搞大事情了&#xff01; 2024互联网岳麓峰会以“AI汇湘江 数智领航未来”为主题&#xff0c;全面聚焦在“AI”时代把握数字化、网络化、智能化发展机遇&#xff0c;积极响应当前人工智能技术迅猛发展的势…

Qt5.4.1连接odbc驱动操作达梦数据库

Qt5.4.1连接odbc驱动操作达梦数据库 1 环境介绍2 Qt5.4.1 安装2.1 图形化界面安装Qt5.4.12.2 配置Qt5.4.1 环境变量2.3 Qt5.4.1 生成 libqsqlodbc.so 并配置2.3.1 生成Makefile2.3.2 查看 libqsqlodbc.so 文件并配置 3 配置Qt测试用例4 达梦数据库学习使用列表 1 环境介绍 CPU…

实现卷积层的前向传播(Pythom版)

在TensorFlow框架中&#xff0c;实现卷积层&#xff08;2维&#xff09;的代码是 tf.keras.layers.Conv2D()。它主要接收如下几个参数&#xff0c; filters&#xff1a;卷积核的个数&#xff0c;也就是卷积层输出的通道数&#xff08;沿axis-1的维度&#xff09; kernel_size&a…

性能碾压pandas、polars的数据分析神器来了

来源&#xff1a;python大数据分析 费弗里 1 简介 就在几天前&#xff0c;经过六年多的持续开发迭代&#xff0c;著名的开源高性能分析型数据库DuckDB发布了其1.0.0正式版本。 DuckDB具有极强的单机数据分析性能表现&#xff0c;功能丰富&#xff0c;具有诸多拓展插件&#xf…

时空特征融合方向小论文创新点一次性都给你!看到就是赚到

朋友们&#xff0c;今天给大家推荐一个发小论文很不错的方向&#xff1a;时空特征融合。 时空特征融合是一种提高模型性能和准确性的关键技术&#xff0c;通过结合空间和时间维度的信息&#xff0c;它可以显著提高模型的预测精度和泛化能力&#xff0c;给我们提供更全面的数据…

惊!还有这种邮件群发神器!?

邮件群发工具是推广营销的重要利器。这种软件具备强大的功能&#xff0c;能够批量发送邮件&#xff0c;确保所发送的邮件不易被标记为垃圾邮件。同时&#xff0c;它还包括自动地址采集和整理功能&#xff0c;能够快速获取邮箱地址&#xff0c;省去了寻找地址的麻烦。 功能亮点&…

Trm理论 2(Word2Vec)

神经网络模型&#xff08;NNLM&#xff09;和Word2Vec NNLM模型是上次说过的模型&#xff0c;其目的是为了预测下一个词。 softmax(w2tanh(w1x b1)b2) 会得到一个副产品词向量 而Word2Vue就是专门求词向量的模型 softmax(w2*(w1*x b1)b2) Word2Vec softmax(w2*(w1*x b1)b…

连续信号的matlab表示

复习信号与系统以及matlab 在matlab中连续信号使用较小的采样间隔来表四 1.单位阶跃信号 阶跃信号:一个理想的单位阶跃信号在时间 t 0 之前值为0&#xff0c;在 t 0 及之后值突然变为常数 A&#xff08;通常取 A 1&#xff09; %matlab表示连续信号,是让信号的采样间隔很小…

Python 中的 SHAP 简介

本文中有多篇计划文章,后期会补充相关链接。鉴于公众号内无法后期修改文章,请关注原文链接。 如何创建和解释 SHAP 图:瀑布图、力图、平均 SHAP 图、蜂群图和依赖图 可直接在橱窗里购买,或者到文末领取优惠后购买: SHAP 是用于理解和调试模型的最强大的 Python 包。它可以…

Oceanbase Restore Point实践

官网链接&#xff1a;Restore Point-V3.2.4-OceanBase 数据库文档-分布式数据库使用文档 在很多应用系统中&#xff0c;用户需要查询数据库中的某个时间点&#xff0c;或者特定版本的数据来完成一些数据分析或汇总之类的操作。 OceanBase 数据库在 V2.2.7x 版本中提供了 Restor…