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.hqwc.cn/news/595988.html

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

相关文章

Qt Creator 界面

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:QT❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、认识 Qt Creator 界面 1、总览 2、左边栏 3、代码编辑区 4、UI设计界面 5、构建区 一、认识 …

docker笔记(二):镜像、容器数据卷

四、 docker镜像 4.1 镜像 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、库、环境变量和配置文件 所有的应用,直接打包docker镜像就可以直…

每日一题(leetcode287):寻找重复数--二分查找+思维

思路&#xff1a;看官方解答 class Solution { public:int findDuplicate(vector<int>& nums) {int nnums.size();int left1;int rightn-1;int ans-1;while(left<right){int mid(leftright)/2;int count0;for(int j0;j<n;j){if(nums[j]<mid){count;}}if(co…

深度剖析扫雷游戏的各个知识点(1)

哈喽&#xff0c;小伙伴&#xff0c;大家好&#xff0c;今天我来水一篇文章。害&#xff0c;也不算真的水吧&#xff0c;这次带大家深度剖析初次写扫雷游戏程序时还未接触到的知识点。废话不多说&#xff0c;直接进入正题 不知小伙伴们是否还记得当时我说过扫雷游戏我们是以多个…

数据结构初阶:顺序表和链表

线性表 线性表 ( linear list ) 是 n 个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串 ... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性…

【第十七篇】使用BurpSuite实现客户端控制绕过(实战案例)

某些应用程序依赖客户端提交到服务器的数据进行操作&#xff0c;但用户可以完全控制客户端。 典型案例&#xff1a;0元购甚至账户增值等。 如图&#xff0c;点击添加购物车时抓包&#xff0c;修改价格参数为1&#xff1a; 单击放行之后再取消拦截&#xff0c;购物车界面价格发…

90天玩转Python—04—基础知识篇:Python编程基础:标识符、保留字、注释、多行语句、print输出以及模块导入详解

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…

C++——特殊类设计

目录 前言 一&#xff0c;请设计一个不能被拷贝的类 二&#xff0c;请设计一个只能在堆上创建对象的类 2.1 思路一&#xff1a;构造函数私有 2.2 思路二&#xff0c;析构函数私有 三&#xff0c;请设计一个只能在栈上创建对象的类 四&#xff0c;请设计一个只能创建一个…

Cortex-M7 内存映射

1 前言 如图1所示&#xff0c; Cortex-M7最大支持4GB的内存寻址&#xff0c;并对内存映射(memory map)做了初步的规定&#xff0c;将整个内存空间划分为了多个内存区域(region)。每个内存区域有着既定的内存类型(memory type)和内存属性(memory attribute)&#xff0c;这两者决…

使用 msys2 sshd为 windows 搭建 ssh 服务器

文章目录 概要整体架构流程技术名词解释MSYS2openSSH服务器 技术细节安装 MSYS2 环境安装openSSH配置、启动SSH 小结和扩展 概要 SSH服务器在Linux下的搭建一般的文章讨论的比较多了。在Windows下&#xff0c;我们常用Windows的Linux子系统来搭建ssh服务器。那有没有更好更简洁…

SV学习笔记(五)

文章目录 线程的使用程序和模块什么是线程线程的概念澄清 线程的控制fork并行线程语句块fork…joinfork…join_any等待所有衍生线程停止单个线程停止多个线程停止被多次调用的任务 线程的通信写在前面event事件通知的需求semaphore旗语mailbox信箱三种通信的比较和应用 参考资料…

无人机/飞控--ArduPilot、PX4学习记录(4)

这是一篇碎碎念&#xff0c;零零碎碎的记录了小组准备竞赛的过程&#xff0c;写的挺乱&#xff0c;仅供本人记录学习历程和参考。 本章主要完成的目标&#xff1a;调试地面站 GPS、加速度校准&#xff1b;试飞并炸机 目录 地面站(QGC)安装(*未完成) 地面站Mission Planner 1.…