【STM32】输入捕获实现超声波测距

1.超声波测距原理

(超声波发出到 遇到障碍物反弹回来的时间)*声速/2就是到障碍物的距离
在这里插入图片描述
操作过程:
单片机给TRIG引脚输出一个脉冲,然后超声波模块会将ECHO电平拉高,当超声波遇到障碍物回来时,ECHO电平就会被拉低,而ECHO高电平的时间就是2倍的距离
读取高电平的时间我们可以使用下面代码:

2.输入捕获

在这里插入图片描述
开启计数器,对于TI1可以输入一个波形,我们可以用TI1来检测输入的波形中的上升沿,当遇到上升沿时,捕获寄存器1就会拷贝计数器的值,如果还开启捕获中断,就会使其立即去处理,我们可以使用ECHO将其波形输入TI1,来捕获ECHO上升沿时的计数,也同样TI1有一个TI1FP2,就 不用再将波形输入带TI2中就可以让捕获寄存器2来记录当ECHO为下降沿时,捕获寄存器2拷贝到计数器的值,此时捕获寄存器1为直接模式,捕获寄存器2为间接模式
有人说计数可能会溢出,因为超声波测距,计数最大记65535,设置频率为72MHAZ,72分频,也就是1us计数一次,声速为0.034cm/us
65535*0.034/2=1114.095cm,也就是11m多,实际我们测不了那么远,所以就不用考虑溢出问题

3.初始化

在这里插入图片描述
PA11设置输出模式输出脉冲
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
开启定时器1捕获比较中断,让通道4检测下降沿立刻处理

char message[50]="";
int begin=0;
int end=0;
float dis=0.0;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim==&htim1&&htim->Channel==HAL_TIM_ACTIVE_CHANNEL_4)//如果是定时器1并且通道四捕获中断
	{
		begin=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_3);//获取捕获寄存器3的值
		end=HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_4);//获取捕获寄存器4的值
		dis=((end-begin)*0.034)/2;


	}





}
int main(void)
{


 

  OLED_Init();
  HAL_TIM_Base_Start(&htim1);//开启定时器1计数
  HAL_TIM_IC_Start(&htim1,TIM_CHANNEL_3);//开启定时器1输入捕获通道三
  HAL_TIM_IC_Start_IT(&htim1,TIM_CHANNEL_4);//开启定时器1输入捕获通道四,加IT是因为当下降沿时直接在中断中处理转换距离

  while (1)
  {
     HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_SET);    //给Trig一个脉冲
     HAL_Delay(1);
     HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_RESET);
     __HAL_TIM_SET_COUNTER(&htim1,0);//给计数器设置为0,方便
     HAL_Delay(20);
	  OLED_NewFrame();
      sprintf(message,"dis:%.2f",dis);
      OLED_PrintString(10,10, message, &font16x16,OLED_COLOR_NORMAL);



	  OLED_ShowFrame();
	  HAL_Delay(500);

  
  }
 
}

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

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

相关文章

phpipam1.7安装部署

0软件说明 phpipam是一个开源Web IP地址管理应用程序(IPAM) phpipam官网:https://www.phpipam.net/ 1安装环境 操作系统:Rocky Linux9.5x86_64 phpipam版本:1.7 php版本:8.0.30 数据库版本&#xff1a…

【C语言】C语言 好声音比赛管理系统(含源码+数据文件)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【C语言】C语言 好声音比赛管理系统(含…

WPF进阶 | 深入 WPF 依赖项属性:理解其强大功能与应用场景

WPF进阶 | 深入 WPF 依赖项属性:理解其强大功能与应用场景 前言一、依赖项属性基础概念1.1 什么是依赖项属性1.2 依赖项属性与 CLR 属性的区别1.3 依赖项属性的定义与注册 二、依赖项属性的原理深入剖析2.1 依赖项属性系统的工作机制2.2 元数据(Metadata…

QML使用ChartView绘制饼状图

一、工程配置 首先修改CMakeLists.txt,按下图修改: find_package(Qt6 6.4 REQUIRED COMPONENTS Quick Widgets) PRIVATEtarget_link_libraries(appuntitledPRIVATE Qt6::QuickPRIVATE Qt6::Widgets )其次修改main.cpp,按下图修改&#xff…

单片机上SPI和IIC的区别

SPI(Serial Peripheral Interface)和IC(Inter-Integrated Circuit)是两种常用的嵌入式外设通信协议,它们各有优缺点,适用于不同的场景。以下是它们的详细对比: — 1. 基本概念 SPI&#xff0…

2025年02月12日Github流行趋势

项目名称:data-formulator 项目地址url:https://github.com/microsoft/data-formulator 项目语言:TypeScript 历史star数:4427 今日star数:729 项目维护者:danmarshall, Chenglong-MS, apps/dependabot, mi…

LeetCode《算法通关手册》 1.2 数组排序

Python强推:算法通关手册(LeetCode) | 算法通关手册(LeetCode) (itcharge.cn) 目录 文章目录 1.2 数组排序1.2.1 选择排序1.2.2 冒泡排序[283. 移动零 - 力扣(LeetCode)](https://leetcode.cn/p…

DeepSeek R1打造本地化RAG知识库

本文将详细介绍如何使用Ollama、Deepseek R1大语音模型、Nomic-Embed-Text向量模型和AnythingLLM共同搭建一个本地的私有RAG知识库。 一. 准备工作 什么是RAG? RAG是一种结合了信息检索和大模型(LLM)的技术,在对抗大模型幻觉、…

网页版贪吃蛇小游戏开发HTML实现附源码!

项目背景 贪吃蛇是一款经典的休闲小游戏,因其简单易玩的机制和丰富的变形而深受玩家喜爱。本次开发目标是实现一款网页版贪吃蛇小游戏,并通过前端与后端结合的方式,提供一个流畅的在线体验。 实现过程 游戏逻辑设计 蛇的移动:…

简易 Shell 实现指南

目录 前言: 一、代码中的核心功能 1. 环境变量获取 2. 当前路径处理 3. 用户输入处理 4. 命令解析 5. 内建命令处理 6. 外部命令执行 7. 错误处理 二、代码中涉及的关键知识点 1. 系统调用 2. 环境变量 3. 字符串处理 4. 文件操作 5. 进程管理 三、…

快速排序

目录 什么是快速排序: 图解: 递归法: 方法一(Hoare法): 代码实现: 思路分析: 方法二(挖坑法): 代码实现: 思路分析: 非递…

网络安全尹毅 《网络安全》

一 网络安全基本概念 1.网络安全定义 安全在字典中的定义是为了防范间谍活动或蓄意破坏、犯罪、攻击而采取的措施。网络安全就是为了防范计算机网络硬件、软件、数据被偶然或蓄意破坏、篡改、窃听、假冒、泄露、非法访问以及保护网络系统持续有效工作的措施总和。网络安全保护…

6.appender

文章目录 一、前言二、源码解析AppenderUnsynchronizedAppenderBaseOutputStreamAppenderConsoleAppenderFileAppenderRollingFileAppenderFileNamePattern 三、总结 一、前言 前一篇文章介绍了appender、conversionRule、root和logger节点的解析, 为的是为本篇详细介绍它们的…

P9584 「MXOI Round 1」城市

题目描述 小 C 是 F 国的总统,尽管这个国家仅存在于网络游戏中,但他确实是这个国家的总统。 F 国由 n 个城市构成,这 n 个城市之间由 n−1 条双向道路互相连接。保证从任意一个城市出发,都能通过这 n−1 条双向道路,…

什么是Docker多架构容器镜像

什么是Docker多架构容器镜像 在 Docker 中,同一个 Docker 镜像可以在不同的平台上运行,例如在 x86、ARM、PowerPC 等不同的 CPU 架构上。 为了支持这种多平台的镜像构建和管理,Docker 在 17.06 版本时引入了 Manifest 的概念,在…

Baklib知识中台构建企业智能运营核心架构

内容概要 在数字化转型的浪潮中,企业对于知识的系统化管理需求日益迫切。Baklib作为新一代的知识中台,通过构建智能运营核心架构,为企业提供了一套从知识汇聚到场景化落地的完整解决方案。其核心价值在于将分散的知识资源整合为统一的资产池…

深度学习机器学习:常用激活函数(activation function)详解

目录 Sigmoid Function ReLU(Rectified Linear Unit) LeakyReLU(Leaky Rectified Linear Unit) ClippedReLU(Clipped Rectified Linear Unit) PRelu(Parametric ReLU) Tanh&am…

【面试】网络安全常问150道面试题

1,拿到一个待测网站,你觉得应该先做什么? 信息收集: 服务器相关---:## 系统版本,真实IP,开放端口,使用的中间件 指纹信息---## 有无cdn加速,dns解析记录,是不…

【Linux】--- 基础开发工具之yum/apt、vim、gcc/g++的使用

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: Linux网络编程 本篇博客我们来认识一下Linux中的一些基础开发工具 --- yum,vim,gcc/g。 🏠 yum 🎸 什么是yum 当用户想下载软…

物联网平台-分布式的设备接入与管理系统

乐吾乐物联网平台是由乐吾乐自主研发的一款分布式的设备接入与管理系统,专为满足不断增长的设备接入和数据处理需求而设计。平台集数据采集、分析、监控、告警和通知等功能于一体,并融合了乐吾乐大屏可视化和乐吾乐3D数字孪生技术,帮助用户快…