STM3定时器输入捕获、超声波测距

1、超声波测距模块介绍

    1、HC-SR04共四个引脚:VCC、GND、Trig、Echo,如下图
在这里插入图片描述
    2、使用
在这里插入图片描述
        1、通过gpio口向Trig引脚发送一个脉冲信号。
        2、HC-SR04接收到脉冲信号后,就会向外发送一段超声波,模块会将echo拉高。
        3、当模块接收到反射回来的超声波后,模块会将echo拉低。那么echo引脚高电平持续的时间,也就是超声波在往返途中消耗的时间。

     知道超声波往返的时间,我们就可以算出距离。

     给trig发送一个脉冲很简单。但是如何高效、精确的获取echo高电平持续的时间??答案是使用定时器输入捕获功能

2、输入捕获

2.1、什么是输入捕获

     1、当定时器输入通道上检测到上升沿或者下降沿时,立刻将此时刻计数器的数值记录到捕获寄存器中,以待程序稍后读取。
在这里插入图片描述

2.2、输入捕获的详细机制

在这里插入图片描述

     1、每个输入通道都有它自己的捕获寄存器。
     如上图,TI1FP1通过一个预分频器后接入捕获寄存器1上,TI2FP2通过一个预分频器后接入捕获寄存器2上。
在这里插入图片描述
     3、一个输入捕获通道只能设置为上升沿或者下降沿,不能设置为双边沿。
     4、假设我们启用了输入通道1的输入捕获模式,并且设置为上升沿捕获。定时器启动计数后,若输入到输入通道的TI1的信号出现了一个上升沿,边沿检测器就会立即检测到,随后触发信号就会通过TI1FP1传递到捕获寄存器1,捕获寄存器1编立刻将此时计数器的值复制到自身。这种叫做直接捕获。
     5、如果我们还为此输入捕获开启了中断,还会触发中断HAL_TIM_IC_CaptureCallback。这样我们在中断中读取捕获寄存器的值,就得到了上升沿出现时定时器的时刻。
     6、只要再获得到下降沿出现的时刻,就能够知道高电平持续的时间了,这里我们就要使用间接捕获了,借助TI2的输入捕获寄存器2来保存下降沿时定时器计数器的值即可。
     7、TI1和TI2可以相互借用,TI3和TI4可以相互借用。

3、使用

     超声波模块echo引脚接在单片机PA10上,Trig引脚接在PA11上。

3.1、配置

     1、设置TIM1的CH3为直接输入捕获,CH4为间接输入捕获:
在这里插入图片描述
     2、设置定时器预分频值为72,定时器的时钟频率为1MHz,方便计算,CH3为上升沿捕获,CH4为下降沿捕获
在这里插入图片描述
     3、开启捕获终中断
在这里插入图片描述

3.2、代码

int upEdge = 0;
int downEdge = 0;
float distance = 0;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{if((htim == &htim1)&&(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_4)){upEdge = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_3);downEdge = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_4);distance = (downEdge - upEdge) * 0.034 / 2;//340m/s = 0.034cm/us}
}
while (1)
{//启动测距HAL_GPIO_WritePin(Trig_GPIO_Port, Trig_Pin, 1);HAL_Delay(1);HAL_GPIO_WritePin(Trig_GPIO_Port, Trig_Pin, 0);__HAL_TIM_SET_COUNTER(&htim1, 0);//等待测距完成HAL_Delay(20);sprintf(message,"juli:%.2fcm",distance);OLED_PrintString(0, 0, message);HAL_Delay(500);
}

3.3、效果

在这里插入图片描述

4、总结

     使用STM32 TIM1 CH3 输入捕获中断,设置为上升沿捕获,来获取超声波模块echo变为高电平时刻;STM32 TIM1 CH4 输入捕获中断,设置为下降捕获,来获取超声波模块echo变为低电平时刻。计算高电平持续的时间进而算出距离。

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

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

相关文章

rpm、yum和编译安装软件

一、rpm 1.rpm包管理工具 建立统一的数据库文件(一张对应表将信息写入) 详细记录软件包安装、卸载等变化信息,自动分析软件包依赖关系 2.rpm一般命令格式 bash-4.1.2-15.el6_4.x86_64.rpm bash(shell软件名称) …

STM32CubeIDE基础学习-定时器PWM实验

STM32CubeIDE基础学习-定时器PWM实验 文章目录 STM32CubeIDE基础学习-定时器PWM实验前言第1章 硬件介绍第2章 工程配置2.1 基础工程配置部分2.2 生成工程代码部分 第3章 代码编写3.1 查看PWM波3.2 设置单个比较值3.3 呼吸灯 第4章 实验现象总结 前言 在平时单片机开发时&#…

JQuery(一)---【JQuery简介、安装、初步使用、各种事件】

零.前言 在学习JQuery前,您需要具备以下知识: HTML相关知识(DOM)CSS相关知识JavaScript相关知识 一.JQuery 1.1JQuery简介 JQuery是一个JavaScript的“函数库”,不是JavaScript的一个框架,与“VUE、REACT”有本质区别&#x…

IPSEC VPN双机热备份的配置讲解一

IPSEC VPN双机热备份的配置讲解一 VPN 是一种专用网络,可使用公共网络连接两个或两个以上的远程站点。VPN 可使用通过公共网络路由(以隧道方式发送)的虚拟连接,而非网络之间的专用连接。IPsec VPN 是一项协议,由建立 …

DHCP-PXE

Dynamic Host Configuration Protocol 动态主机配置协议 1.Selinux 调试为Permission 防火墙配置 搭建DHCP的主机必须有一个静态地址,提前配置好 安装DHCP软件 服务名为dhcpd DHCP地址分配四次会话, DISCOVERY发现 OFFER 提供 REQUEST 回应 A…

代码随想录算法训练营第42天| 背包问题、416. 分割等和子集

01 背包 题目描述:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 二维dp数组01背包: 确定dp数组以及下标的含义 …

实景三维技术也是一种新质生产力

实景三维技术作为一种新兴的技术手段,正在逐渐被认为是一种新质生产力。它通过高精度的数据采集、处理和可视化,为多个行业领域提供了全新的工作方式和解决方案,从而推动了生产力的发展和创新。以下是实景三维技术作为新质生产力在不同方面的…

Mac 配置 Aria2

文章目录 1. Aria2 安装1.1 安装 brew1.2 安装 Aria2 2. 配置 Aria22.1 创建配置文件 aria2.conf 和空对话文件 aria2.session2.2 编辑配置文件 aria2.conf 3. 开机启动设置3.1 创建用户启动文件3.2 管理自启动项 4. 配置 BT tracker 自动更新4.1 XIU2/TrackersListCollection …

通义灵码-ai编码

https://developer.aliyun.com/topic/lingma/activities/202403?taskCode14508&recordIdb1ef3ba27250a5818b1b6ffe418af658#/?utm_contentm_fission_1 「通义灵码 体验 AI 编码,开 AI 盲盒」

【Kafka】Kafka安装、配置、使用

【Kafka】安装Kafka 1. 安装Kafka2. Kafka使用2.0 集群分发脚本xsync(重要)2.0.1 scp命令2.0.2 rsync远程同步工具2.0.3 写一个集群分发脚本xsync (Shell 脚本) 2.1 Zookeeper安装2.2 对Kafka进行分发2.2.1 执行同步脚本2.2.2 三台云主机配置Kafka环境变量 1. 安装Kafka Kafka…

《QT实用小工具·十五》多种样式的开关控件

1、概述 源码放在文章末尾 目前实现了三种样式的开关控件按钮&#xff0c;如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef IMAGESWITCH_H #define IMAGESWITCH_H/*** 图片开关控件 * 1. 自带三种开关按钮样式。* 2. 可自定义开关图片。*/#include <QWid…

FreeRtos入门-7 中断管理

中断管理 中断管理相比非中断的优势 1&#xff0c;简洁和效率。 2&#xff0c;同步和安全。提供了中断安全的操作&#xff0c;确保在中断上下文中执行时不会引发竞态条件或破坏系统状态。 3&#xff0c;通过配置中断的优先级&#xff0c;可以确保高优先级的中断能够立即响应…

配置Mysql集群主从复制报错

配置Mysql集群主从复制报错: 我在master创建了一个数据库&#xff08;demo_ds_0&#xff09;,然后又快速删除了。然后又再次创建了 demo_ds_0, 发现 slave 数据库没有将 demo_ds_0 库同步过来。 后面在 slave 数据库中执行 show slave status 发现 SLave_IO_Running 字段是 …

OpenHarmony开发-系统烧录

本文详细介绍了烧录OpenHarmony系统到开发板的操作流程。从基础的硬件准备和软件环境设置入手&#xff0c;详细说明了如何配置开发环境、构建系统镜像等过程&#xff0c;详细描述了烧录过程中的关键步骤&#xff0c;以及如何使用专用工具将OpenHarmony系统镜像传输到开发板。同…

蓝桥杯每日一题:公约数(gcd)

题目描述&#xff1a; 给定两个正整数 a 和 b。 你需要回答 q 个询问。 每个询问给定两个整数 l,r&#xff0c;你需要找到最大的整数 x&#xff0c;满足&#xff1a; x 是 a和 b 的公约数。l≤x≤r。 输入格式 第一行包含两个整数 a,b。 第二行包含一个整数 q。 接下来…

力扣Lc29---- 541. 反转字符串 II(java版)-2024年4月06日

1.题目描述 2.知识点 &#xff08;1&#xff09;执行步骤如下&#xff1a; 初始化 s “abcdefg” 和 k 2 将字符串分割成长度为 2k 4 的块。 对每个块中的前 k 2 个字符进行反转。 执行过程 1&#xff09;第一次循环&#xff08;i 0&#xff09; start 0 end Math.min(0…

当下鸿蒙开发热潮,大前端开发有没有必要搞!!!

鸿蒙到底好不好&#xff1f;要不要搞&#xff1f; Android开发反正目前工作感觉也不好找&#xff0c;即便是上海这样的大城市也难搞&#xff0c;人员挺饱和的。而且年前裁员的公司那么多&#xff0c;再看自己&#xff0c;年龄不是优势&#xff1b;技术不是优势&#xff0c;想想…

16 - 程序计数器和内存

---- 整理自B站UP主 踌躇月光 的视频 1. 程序计数器 程序计数器需要支持后续程序的运行&#xff0c;需要支持跳转&#xff0c;所以需要一个预置数的功能。我们在 ALU 前面加上个寄存器。 2. 内存控制器 3. 通过程序计数器读取内存 辅助工具 4. 实验工程 【16 - 程序计数器和…

【C++】红黑树讲解及实现

前言&#xff1a; AVL树与红黑树相似&#xff0c;都是一种平衡二叉搜索树&#xff0c;但是AVL树的平衡要求太严格&#xff0c;如果要对AVL树做一些结构修改的操作性能会非常低下&#xff0c;比如&#xff1a;插入时要维护其绝对平衡&#xff0c;旋转的次数比较多&#xff0c;更…

降低笔记本电脑噪音的七种方法,看下有没有适合你的

序言 无论是玩游戏、浏览网络还是做严肃的工作,差不多都有这么一台笔记本电脑,它有足够的处理能力来处理几乎任何事情。不幸的是,它可能会变得非常大声,但有办法来遏制这种噪音。 清洁通风口和风扇,并使用硬表面 如果你的笔记本电脑现在比过去运行同样的软件时声音更大…