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

news2025/1/22 15:56:43

超声波测距模块参考资料

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.coloradmin.cn/o/2112471.html

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

相关文章

飞特STS3315基本使用方法

宁天道/FeelECH 01-介绍 串口总线舵机,可以通过一根线将多个舵机串联在一起,一个串口线片可以控制所有的舵机。 内带闭环,可以自定义舵机移动的最大速度,加速度, 可以修改各种模式,满足各种各样的需求&…

OTN光传送网-介绍

1. 引用 OTN光传送网--华为设备_otn传输设备建设方案-CSDN博客 OTN光传送网(Optical Transport Network)&什么是OTN-CSDN博客 https://zhuanlan.zhihu.com/p/403304019 术语: 英文缩写描述灰光模块彩光模块CWDM:Coarse Wa…

欺诈文本分类检测(十三):交叉训练验证

1. 引言 交叉验证主要讨论的是数据集的划分问题。 通常情况下,我们会采用均匀随机抽样的方式将数据集划分成3个部分——训练集、验证集和测试集,这三个集合不能有交集,常见的比例是8:1:1(如同前文我们所作的划分)。这三个数据集…

吉利星座03组卫星发射

北京时间2024年9月6日2时30分,在太原卫星发射中心使用长征六号运载火箭,成功将民营“中国星链”——吉利未来出行星座第三个轨道面、吉利星座03组卫星发射升空,10颗卫星顺利进入预定轨道,发射任务获得圆满成功。此次任务是长征系列…

飞思相机存储卡格式化数据如何恢复?提供全面指南

在数字摄影时代,‌飞思相机以其卓越的成像质量和专业的性能,‌赢得了众多摄影师的青睐。‌然而,‌即使是专业的设备也难免遭遇数据丢失的困境,‌尤其是当存储卡不幸被格式化时。‌面对这一突如其来的灾难,‌许多摄影师…

qt QGraphicsScene场景坐标和场景内GraphicsItem局部坐标的相互转换

为了更清晰地解释场景坐标与局部坐标之间的转换过程,我们可以通过一个简单的实例来演示如何赋值场景坐标,并将其转换为图形项的局部坐标。 实例步骤 假设我们有一个场景 QGraphicsScene 和一个矩形图形项 QGraphicsRectItem,矩形的大小为 1…

Redis进阶(六):缓存

1.缓存 速度快的设备可以作为速度慢的设备的缓存 缓存能够有意义:二八定律,20%的数据可以应对80%的请求 通常使用redis作为数据库的缓存(mysql) 数据库是非常重要的组件,mysql速度比较慢 因为mysql等数据库&#x…

【 C++ 】类和对象的学习(三)

前言: 😘我的主页:OMGmyhair-CSDN博客 目录 一、初始化列表 二、类型转换 三、static成员 四、友元 五、内部类 六、匿名对象 一、初始化列表 当我们之前在写构造函数时,我们通常在构造函数内对成员变量进行赋值。但其实还…

系统架构师考试学习笔记第三篇——架构设计高级知识(19)嵌入式系统架构设计理论与实践

本章考点: 第19课时主要学习嵌入式系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分)。在历年考试中,案例题对该部分内容都有固定考查,综合知识选择题目中有固定分值…

北大港中文腾讯提出ViewCrafter:一张图像就可以制作影视特效和游戏画面!

北大和港中文联合腾讯人工智能实验室提出了 ViewCrafter,这是一种利用视频扩散模型的先验从单个或稀疏图像合成一般场景的高保真新视图的新方法。 可以简单理解为将复杂的图像转换成新角度的图像版本。首先,它会使用特殊的算法来读取一张或几张图像&…

SpringBoot项目-实现简单的CRUD功能和分页查询

背景 本博文主要是创建了一个新的SpringBoot项目,实现基本的增删改查,分页查询,带条件的分页查询功能。是方便初学者学习后端项目的一个比较清晰明了的实践代码,读者可根据博文,从自己动手创建一个新的SpringBoot项目…

Scratch教师节 —— 感恩教师节

小虎鲸Scratch资源站-免费Scratch作品源码,素材,教程分享平台! Scratch教师节动画作品——感恩教师节 在这个特别的日子里,我们迎来了教师节。为了表达对老师们的感激之情,Scratch平台上的小朋友们用创意与热情制作了精彩的动画作品——“感恩教师节”。…

在国产芯片上实现YOLOv5/v8图像AI识别-【4.3】RK3588使用yolov8+bytetrack实现跟踪更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频:https://www.bilibili.com/video/BV1or421T74f 背景…

【Canvas与艺术】四叶花

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>386.四叶花</title><style type"text/css">.c…

GDB watch starti i files

watch break starti 在程序的最初开始运行的位置处断下来 ​​ i files 查看程序及加载的 so 的 sections ​​

【Ubuntu】环境准备

平时不怎么接触运维。linux的东西都快忘完了&#xff0c;正好最近腾讯云优惠&#xff0c;38元一年&#xff0c;优惠拉满&#xff0c;拿下一个玩一玩&#xff0c;可以当小程序的服务器&#xff0c;记录一些常用的操作&#xff0c;省的每次用的时候都想不起来 1.有一个linux系统…

对接后端download接口报未知异常错误

你一定遇到过这种情况&#xff0c;在一个项目中下载功能明明好好的&#xff0c;下载接口调用方法与前端调用方法封装的好好的&#xff0c;可是换了一个接口&#xff0c;竟然搞罢工了&#xff0c;类似下面这样的&#xff0c;你会不会无从下手&#xff0c;不知道该怎么办呢&#…

2.C_数据结构_线性表

线性表的描述 线性表就是若干数据的一个线性序列。 数学表达式&#xff1a; L&#xff1a;表名 a0~an-1&#xff1a;数据元素 n&#xff1a;表长&#xff0c;n>0是为非空表 二元描述形式&#xff1a; D&#xff1a;数据元素D用 ai 表示&#xff0c;这个 i 范围是0~n-1 …

【C++从练气到飞升】21---再谈哈希算法:位图 | 布隆过滤器 | 哈希切分

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书&#x1f389; 目录 ⛳️推荐 一、位图 1.1 一道面试题 1.2 位图的概念 1.3 位图的模拟实现 1.4 位图的应用 1.4.1 给定100亿…

双项第一!鼎捷强势领跑PLM市场

近日&#xff0c;国际数据公司IDC发布了《中国PLM市场分析及厂商份额&#xff0c;2023&#xff1a;创新左移》 报告数据显示鼎捷PLM2023年收入增长率39.5%&#xff0c;收入增速市场第一 鼎捷在多个细分行业市场中保持领先&#xff0c;在装备制造PLM领域市场份额达到7.9%市占率…