超声波传感器(HC-SR04)按时序图手撕驱动

news2025/1/17 6:16:18

目录

1、简介

2、传感器介绍

2.1 引脚介绍

2.2 时序图介绍

3、 需求与接线

3.1 任务需求

3.2 接线

4、Cubemax配置

4.1 SYS配置

4.2 RCC配置

4.3 时钟树配置

4.4 GPIO初始化

 4.5 定时器配置

 4.6 生成代码

5、 keil端代码编写

5.1 微妙函数封装

5.2 超声波驱动封装

5.2.1 引脚宏定义

5.2.2 按时序图进行封装

5.2.3 封装函数

5.3 任务实现


1、简介

在单片机开发中,最开始是直接使用厂家提供的驱动,有时候厂家不提供或者好用时候还会网上复制被人的驱动,但是有的并没有资源可用,此时就需要自己按照说明书/使用手册进行驱动的封装,本文就是从最简单的超声波超声波传感器开始进行练习驱动的封装。

2、传感器介绍

2.1 引脚介绍

HC-SRF04超声波测距传感器+Proteus仿真(附源码与仿真电路)_君子不怨的博客-CSDN博客_srf04

 VCC、GND 电源引脚(DC5V)。

Trig  接高电平会发出信号。

Echo 由低电平转到高电平,开始发送波。由高电平转到低电平,表示波返回。

2.2 时序图介绍

 流程:

首先给Trig10us的高电平信号,进行信号触发,当信号触发后,Echo会从低电平跳转到高电平开始发出超声波,当遇到障碍物,超声波会返回,此时Echo由高电平转到低电平,表示波返回。

距离计算:

 高电平持续的时间就是超声波发出的时间,因此在波发出的时候就需要启动定时器计算时间t。因为超声波遇到障碍物返回,所以计算距离应该将t/2处理,得到单程的时间。

Distance = v * t /2。

v = 340m/s

3、 需求与接线

3.1 任务需求

当距离小于10cm,LED灯被点亮,大于10cm时LED灯处于熄灭状态。

3.2 接线

LED ---- PB0

Trig ---- PB6

Echo --- PB7

4、Cubemax配置

4.1 SYS配置

4.2 RCC配置

4.3 时钟树配置

直接在红框内输入下方数值,回车确定即可自动对时钟树进行配置。

4.4 GPIO初始化

 4.5 定时器配置

定时器只用作计数,不用做定时,如下图所示:

 计算:

T = (arr+1)/TCK
 =  (71+1)/(72000000)//1M等于1000000hz
 =  1us

因此按照如上配置,计数一次代表1us。

 4.6 生成代码

5、 keil端代码编写

5.1 微妙函数封装

 需要一个10us延时进行信号触发,但是HAL库并不具备微妙级函数,因此需要在主函数上方进行微秒级函数封装,封装函数如下所示:

void TIM2_Delay_us(uint16_t n)
{
	__HAL_TIM_ENABLE(&htim2);//使能定时器
	__HAL_TIM_SetCounter(&htim2,0);
	while(__HAL_TIM_GET_COUNTER(&htim2) <(n-1));
	__HAL_TIM_DISABLE(&htim2);//关闭定时器
}

5.2 超声波驱动封装

5.2.1 引脚宏定义

为了便于函数的整理,首先在main.h中进行宏定义,如下所示:

#define Trig_up HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_SET)
#define Trig_Down HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_RESET)
#define Trig HAL_GPIO_ReadPin(Trig_GPIO_Port,Trig_Pin)
#define Echo_up HAL_GPIO_WritePin(Echo_GPIO_Port,Echo_Pin,GPIO_PIN_SET)
#define Echo_Down HAL_GPIO_WritePin(Echo_GPIO_Port,Echo_Pin,GPIO_PIN_RESET)
#define Echo HAL_GPIO_ReadPin(Echo_GPIO_Port,Echo_Pin)
#define LED_up HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET)
#define LED_Down HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET)
#define LED HAL_GPIO_ReadPin(LED_GPIO_Port,LED_Pin)

5.2.2 按时序图进行封装

 观察时序图,首先需要Trig一个大于10us高电平进行信号触发,如下代码所示:

Trig_up;
TIM2_Delay_us(20);
Trig_Down;

Echo由低电平转到高电平,表示波已发出,当波发出去时候进行定时器的启动,如下所示:

while(Echo==0);
HAL_TIM_Base_Start(&htim2);//开启定时器

Echo由高电平转到低电平,超声波遇到障碍物返回,关闭定时器,如下所示:

while(Echo==1);
HAL_TIM_Base_Stop(&htim2);//关闭定时器

接着进行时间与距离的计算,如下所示:

*cnt = __HAL_TIM_GET_COUNTER(&htim2);//计数一次是1us 
	
*dis = 340*(*cnt)/2*0.000001*100;//1us = 0.000001s 1m = 100cm

5.2.3 封装函数

void HCSR(int *cnt,float *dis)
{
	//Trig大于10us高电平
	Trig_up;
	TIM2_Delay_us(20);
	Trig_Down;
	
	//Echo由低电平转到高电平,开始发送超声波
	while(Echo==0);
	HAL_TIM_Base_Start(&htim2);//开启定时器
	
	//Echo由高电平转到低电平,超声波遇到障碍物返回
	while(Echo==1);
	HAL_TIM_Base_Stop(&htim2);//关闭定时器
	
	//计算时间
	*cnt = __HAL_TIM_GET_COUNTER(&htim2);//计数一次是1us 
	
	//距离计算
	*dis = 340*(*cnt)/2*0.000001*100;//1us = 0.000001s 1m = 100cm
	
}

5.3 任务实现

最后在主函数的while中进行逻辑代码的实现,如下所示:

while (1)
  {
		int cnt = 0;
		float dis = 0;
		HCSR(&cnt,&dis);
		if(dis<5){
			LED_up;
		}
		else
		{
			LED_Down;
		}
		HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

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

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

相关文章

机器学习---线性判别分析

1. 基本思想 线性判别分析(Linear Discriminant Analysis, LDA)&#xff0c;也叫做 Fisher 线性判别(Fisher Linear Discriminant ,FLD)&#xff0c;是模式识别的经典算法&#xff0c;1936年由Ronald Fisher⾸次提出&#xff0c;并在1996年由 Belhumeur引⼊模式识别和⼈⼯智能…

【探索C++】用实例教你理解面向对象编程(看不懂打我版)

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;软件配置等领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff01;送给自己和读者的…

软件系统工具-架构师真题(六)

_____不属于可修改性考虑的内容。&#xff08;2016&#xff09; 可维护性可扩展性结构重构可变性 答案:D 解析&#xff1a; 可修改性指快速较高的性能价格进行系统优化&#xff0c;包括可维护性、可扩展性、结构重组和可移植性四个方面。 软件系统工具中&#xff0c;软件评…

Docker 常规软件安装

1. 总体安装步骤 1. 搜索镜像 search 2. 拉取镜像 pull 3. 查看镜像 images 4. 启动镜像 - 端口映射 run 5. 停止容器 stop 6. 移除容器 rm 2. 安装tomcat 1. 搜索 docker search tomcat 2. 拉取 docker pull tomcat 3. 查看本地镜像 docker images tomcat 4. 创建容器实…

两个List合并、去重、排序

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

打通应用“壁垒”,数据分类分级结果与安全策略自动匹配

《网络安全法》、《数据安全法》等法律法规&#xff0c;以及各行业各领域与数据安全相关的标准规范&#xff0c;几乎都涉及对数据进行分类分级保护的要求。数据安全始于分类分级&#xff0c;已成为毫无疑问的行业共识。 但现实中不少用户却止步在分类分级工作&#xff0c;“如…

linux虚拟机中各服务端口及配置文件路径

查询端口状况命令&#xff1a; netstat -an| grep 端口号 查询服务状态&#xff08;服务是否开启&#xff09;命令&#xff1a;systemctl status 服务名 开启服务命令&#xff1a;systemctl start 服务名 21端口&#xff1a;FTP 文件传输服务 22端口&#xff1a;SSH协议、…

无涯教程-Perl - wait函数

描述 该函数等待子进程终止,返回已故进程的进程ID。进程的退出状态包含在$?中。 语法 以下是此函数的简单语法- wait返回值 如果没有子进程,则此函数返回-1,否则将显示已故进程的进程ID Perl 中的 wait函数 - 无涯教程网无涯教程网提供描述该函数等待子进程终止,返回已故…

怎么把pdf压缩到5m以内?压缩办法非常多

怎么把pdf压缩到5m以内&#xff1f;PDF文件是我们办公过程中较为常用的文件格式&#xff0c;PDF文件所包含的内容通常较多&#xff0c;比如文本、图像以及音视频等等。这样的话&#xff0c;PDF文件占用内存也较大。如果需要对PDF文件进行使用、传输、分享等的话&#xff0c;可能…

中路对线发现正在攻防演练中投毒的红队大佬

背景 2023年8月14日晚&#xff0c;墨菲安全实验室发布《首起针对国内金融企业的开源组件投毒攻击事件》NPM投毒事件分析文章&#xff0c;紧接着我们在8月17日监控到一个新的npm投毒组件包 hreport-preview&#xff0c;该投毒组件用来下载木马文件的域名地址竟然是 img.murphys…

【TypeScript】任意类型

前置准备 在 powershell 安装 ts-node 包&#xff0c;可以先借助 xmzs 包切换淘宝镜像&#xff0c;加快安装速度。 在 vscode 终端执行 npm init -y 生成 package.json 文件 然后在 vscode 终端执行 npm i types/node -D 最后就可以在 vscode 终端执行ts-node&#xff0c;直接…

Typora 相对路径保存图片以及 Gitee 无法显示图片

目录 Typora 相对路径保存图片 Gitee 无法显示图片 Typora 相对路径保存图片 Step1&#xff1a;修改 Typora 的偏好设置 自动在当前目录创建名为 "./${filename}.assets" 的文件夹粘贴图片到 md 中时&#xff0c;图片会自动另存到 "./${filename}.assets&qu…

macOS Ventura 13.5.1(22G90)发布(附黑/白苹果系统镜像地址)

系统镜像下载&#xff1a;百度&#xff1a;黑果魏叔 系统介绍 黑果魏叔 8 月 18 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5.1 更新&#xff08;内部版本号&#xff1a;22G90&#xff09;&#xff0c;本次更新距离上次发布隔了 24 天。 本次更新重点修复了…

ip2region(1):java通过Ip2region实现IP定位

1 Ip2region简介 Ip2region是一个开源工具库,是一种用于IP地址定位的工具。 它是基于B树数据结构的数据库&#xff0c;可用于将IP地址转换为国家、省、市、区县等信息。 使用Ip2region工具&#xff0c;您可以轻松地查找某个IP地址所在的区域信息&#xff0c;从而帮助您进行定位…

页面加载慢问题排查结论

遇到一个很奇怪的现象&#xff0c;已知A和B两个页面&#xff0c;都有调用同一个弹框&#xff0c;但是A页面很快&#xff0c;一切正常&#xff0c;B页面需要加载很久&#xff0c;就很奇怪。 后面又发现&#xff0c;B页面里面不同tab C和D&#xff0c;调用上面的弹框&#xff0c…

专业高度契合|中国文学对接伦敦大学亚非学院访学申请成功

G老师的研究方向以中国文学为主&#xff0c;重点是现当代文学&#xff0c;优先申请英国高校访学&#xff0c;而英国高校从事该领域研究的学者屈指可数&#xff0c;经过努力&#xff0c;我们先后得到伦敦国王学院、斯特林大学及伦敦大学亚非学院的接受意向&#xff0c;用伦敦国王…

【目标检测中对IoU的改进】GIoU,DIoU,CIoU的详细介绍

文章目录 1、IoU2、GIoU(Generalized Intersection over Union)3、DIoU4、CIoU 1、IoU IoU为交并比&#xff0c;即对于pred和Ground Truth&#xff1a;交集/并集 1、IoU可以作为评价指标使用&#xff0c;也可以用于构建IoU loss 1 - IoU 缺点&#xff1a; 2、对于pred和GT相…

学渣的愤怒!自考本科能不能不考英语和数学?

英语和高数哪个更难&#xff1f; 这是自考生们最头大的两个科目。 自考高数有多难&#xff1f; 高数主要有微积分、线性代数和概率论三个部分。 其中微积分是基础、也是重要的一部分&#xff0c;不仅涉及到很多抽象概念和符号运算&#xff0c;还需要具备良好的计算能力和逻…

Nginx的介绍

本资料转载于传智教育-解锁你的IT职业薪未来&#xff0c;仅用于学习和讨论&#xff0c;如有侵权请联系 视频地址&#xff1a;04-Nginx的优点_哔哩哔哩_bilibili 资源文档&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1RlFl92FdxRUqc858JSxPSQ 提取码&#xff1a;12…

Air780EG —— 合宙4G定位解决方案

定位模式&#xff1a; 外部单片机控制模式(常见于AT固件客户)&#xff1a; 开机 -> 搜星 -> 定位成功 -> 上报 -> 关机 780E自行控制模式(常见于二次开发客户&#xff0c;AT用户也可以使用): 开机 -> 搜星 -> 定位成功 -> 模块休眠&#xff0c;关闭GP…