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变为低电平时刻。计算高电平持续的时间进而算出距离。

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

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

相关文章

Web CSS笔记3

一、边框弧度 使用它你就可以制作盒子边框圆角 border-radius:1个值四个圆角值相同2个值 第一个值为左上角与右下角,第二个值为右上角与左下角3个值第一个值为左上角, 第二个值为右上角和左下角,第三个值为右下角4个值 左上角,右…

舞蹈网站制作分享,舞蹈培训商城网站设计案例分享,wordpress主题分享

嘿,朋友们!今天我要跟你们唠一唠一个超级酷炫的舞蹈培训商城网站设计案例。 咱先说说这个网站的目标哈,那就是得让喜欢舞蹈的小伙伴们能够轻轻松松找到自己心水的课程和商品。 那制作过程都有啥呢?别急,听我慢慢道来。…

c# wpf LiveCharts 绑定 多线条 简单试验

1.概要 c# wpf LiveCharts 绑定 多线条 简单试验 2.代码 <Window x:Class"WpfApp3.Window4"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http:…

清明假期作业

1、实现文件夹的拷贝功能 注意判断被拷贝的文件夹是否存在&#xff0c;如果不存在则提前 不考虑递归拷贝的问题 #include<myhead.h> int my_copy(char* name,const char *p) {char buf[256]"./";strcat(buf,p);strcat(buf,"/");strcat(buf,name);in…

P1001 A+B Problem

1.题目背景 强烈推荐新用户必读帖。 不熟悉算法竞赛的选手请看这里&#xff1a; 算法竞赛中要求的输出格式中&#xff0c;**不能有多余的内容&#xff0c;这也包括了“请输入整数a和b” 这一类的提示用户输入信息的内容。**若包含了这些内容&#xff0c;将会被认为是Wrong Answ…

嵌入式Qt QGridLayout网格布局管理器

一.QGridLayout网格布局管理器 //以行为单位 设置比例系数 void QGridLayout::setRowStretch ( int row, int stretch ) //以列为单位 设置比例系数 void QGridLayout::setColumnStretch ( int column, int stretch ) 实验&#xff1a; Widget.h&#xff1a; #ifndef _WIDGE…

dm8数据迁移工具DTS

dm8数据迁移工具DTS DTS工具介绍 DM数据迁移工具提供了主流大型数据库迁移到DM、DM到DM、文件迁移到DM以及DM迁移到文件的功能。DM数据迁移工具采用向导方式引导用户通过简单的步骤完成需要的操作。 DM数据迁移工具支持&#xff1a; ◆ 主流大型数据库Oracle、SQLServer、MyS…

3.6 CSS定位

CSS定位可以将HTML元素放置在页面上指定的任意地方。CSS定位的原理是把页面左上角的点定义为坐标为(0,0)的原点&#xff0c;然后以像素为单位将整个网页构建成一个坐标系统。其中x轴与数学坐标系方向相同&#xff0c;越往右数字越大&#xff1b;y轴与数学坐标系方向相反&#x…

r3live使用realsense避免相机内参标定

话题 /camera/color/camera_info 消息格式 sensor_msgs/CameraInfo distortion_model&#xff1a;指定了相机畸变模型&#xff0c;"plumb_bob"简单的径向和切向畸变模型 D&#xff1a;畸变参数&#xff0c;取决于畸变模型&#xff0c;(k1, k2, t1, t2, k3)&#xf…

Shell编程初识

Shell初识 ShellShell 脚本Shell 环境第一个shell脚本实例 运行 Shell 脚本方法&#xff1a;1、作为可执行程序2、作为解释器参数3.使用 . (空格)脚本名称来执行4.使用 source 来执行(主要用于生效配置文件)区别1.关于执行权限2.关于是否开启子shell线程 脚本排错及问题判断she…

dm8 备份与恢复

dm8 备份与恢复 基础环境 操作系统&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本&#xff1a;DM Database Server 64 V8 架构&#xff1a;单实例1 设置bak_path路径 --创建备份文件存放目录 su - dmdba mkdir -p /dm8/backup--修改dm.ini 文件…

Linux学习之路 -- 进程篇 -- PCB介绍2 -- 标识符和进程创建

前面我们介绍了的进程的标识符&#xff0c;下面继续介绍进程标识符和进程创建的知识。 目录 一、进程创建 <1>fork函数的返回值 <2>创建子进程的目的 <3>代码共享 二、fork函数的相关问题 <1>为什么给父进程返回子进程的pid&#xff0c;给子进程…

数据生成 | Matlab实现基于DE差分进化算法的数据生成

数据生成 | Matlab实现基于DE差分进化算法的数据生成 目录 数据生成 | Matlab实现基于DE差分进化算法的数据生成生成效果基本描述模型描述程序设计参考资料 生成效果 基本描述 1.Matlab实现基于DE差分进化算法的数据生成&#xff0c;运行环境Matlab2021b及以上&#xff1b; 2.计…

代码随想录算法训练营Day46|LC139 单词拆分

一句话总结&#xff1a;完全背包&#xff01; 原题链接&#xff1a;139 单词拆分 动态规划之完全背包五部曲&#xff1a; 确定dp数组与下标含义&#xff1a;表示字符串长度为i时&#xff0c;dp[i] true 的话&#xff0c;可以拆分为一个或多个在字典中出现的单词。确定递归公…

C++相关概念和易错语法(4)(构造函数、析构函数)

一、构造函数 1.实现的功能&#xff1a;实例化对象的时候默认自动调用&#xff0c;相当于初始化。 条件&#xff1a;在书写时要满足构造函数的规范&#xff08;函数名 类名&#xff0c;不写返回值&#xff0c;也没有返回值&#xff09;&#xff0c;可以用inline来修饰。 2.自…

Microsoft Edge浏览器设置之后就很牛逼了

1.移除多余的广告 首先我们要先下载Microsoft Edge浏览器浏览器 然后在设置中先打开扩展,安装一个神奇的去广告插件 打开Edge 加载项 直接搜adguard 广告拦截器,直接获取就可以安装了,由于我已经安装过了,所以就是显示的删除。 2.解除网页复制限制 直接在扩展中安装sim…

Toyota Programming Contest 2024#4(AtCoder Beginner Contest 348)(A~D)

A - Penalty Kick i,1~N。如果 i 是 3 的倍数输出x&#xff0c;否则输出o #include <bits/stdc.h> //#define int long long #define per(i,j,k) for(int (i)(j);(i)<(k);(i)) #define rep(i,j,k) for(int (i)(j);(i)>(k);--(i)) #define debug(a) cout<<#…

HTTP详解及代码实现

HTTP详解及代码实现 HTTP超文本传输协议 URL简述状态码常见的状态码 请求方法请求报文响应报文HTTP常见的HeaderHTTP服务器代码 HTTP HTTP的也称为超文本传输协议。解释HTTP我们可以将其分为三个部分来解释&#xff1a;超文本&#xff0c;传输&#xff0c;协议。 超文本 加粗样…

开源 _ 新一代Android 性能监控框架Rabbit

最终扫描结果会展示如下: 点击右上角导出按钮可以把扫描结果以json的形式导出到SD卡中。 网络日志监控 rabbit可以记录网络请求日志并方便的查看返回的json数据: 卡顿日志监控 rabbit通过Choreographer来检测主线程的运行情况,并异步采集主线程堆栈来还原卡顿现场。 对于下…

总包不足80w的高龄Android程序员,被面试官diss混得太差,网友狂吐槽……

有网友直言&#xff1a;90%的人一辈子一年也拿不到80万 有网友分析到&#xff1a;看面试情况&#xff0c;没什么希望就直接其实我觉得30岁年薪低于1000万的都是loser&#xff0c;你我都是 有网友说&#xff1a;这几年互联网行业极大发展&#xff0c;让互联网行业成为了明星行…