超声波测距模块HC-SR04(基于STM32F103C8T6HAL库)
超声波测距模块参考资料
1.电路连接及引脚配置
触发信号PA3只需要输出10us的高电平,所以直接设置成 普通的GPIO端口即可;回响信号使用外部中断,上升沿信号产生外部中断,打开定时器,下降沿再产生一次中断,读取定时器的值,就是高电平的时间,测试距离=(高电平时间*声速(340M/S))/2。
调试引脚配置:
配置时钟:
GPIO配置:
打开中断:
定时器设置:配置成最基本的定时器即可
PSC设置为72时候就是没过1us定时器里面的计数值就加1,我们的计数器是16位的,就是最大可以计数到65535,那我这个定时器最大可以计时到65535us,即0.065535s。所以最大测距范围为:,远远大于这款超声波测距模块的测距范围。
除此之外,我们要设置一下I2C给OLED显示屏使用,用于显示测量值:
2.驱动文件编写
(1)添加两个文件sr04.c和sr04.h
(2)sr04. h
#ifndef _SR04_H
#define _SR04_H#include "stm32f1xx_hal.h"void GET_Distance(void);#endif
(3)sr04.c,超声波测距实现
#include "sr04.h"uint16_t count;
float distance;
extern TIM_HandleTypeDef htim3;/*指令耗时计算延时函数:
在程序里执行若干条空指令,来达到延时效果*/
void RCCdelay_us(uint32_t udelay)
{__IO uint32_t Delay = udelay * 72 / 8;//(SystemCoreClock / 8U / 1000000U)//见stm32f1xx_hal_rcc.c -- static void RCC_Delay(uint32_t mdelay)do{__NOP();}while (Delay --);
}/*测距模块触发信号函数*/
void GET_Distance(void)
{HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);RCCdelay_us(12); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET); //触发引脚电平拉高12us输出触发信号
}/*中断服务函数,计数定时,解算测量距离*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_2)==GPIO_PIN_SET) //上升沿中断{__HAL_TIM_SetCounter(&htim3,0); //定时器清零HAL_TIM_Base_Start(&htim3); //定时器开始计时}else //下降沿触发中断{HAL_TIM_Base_Stop(&htim3); //定时器停止计时count=__HAL_TIM_GetCounter(&htim3); //读取定时器计数值distance=count*0.017; //测试距离:((count/1000000)*340/2)*100,单位CM}
}
(4)main.c
主函数里直接在直接调用GET_Distance()即可。
相关文章:

超声波测距模块HC-SR04(基于STM32F103C8T6HAL库)
超声波测距模块参考资料 1.电路连接及引脚配置 触发信号PA3只需要输出10us的高电平,所以直接设置成 普通的GPIO端口即可;回响信号使用外部中断,上升沿信号产生外部中断,打开定时器,下降沿再产生一次中断,读…...
Go语言结构体和元组全面解析
Go语言中的复合类型与其应用 在编程中,标准类型虽然方便,但无法满足所有需求。Go通过支持结构体和元组类型,为开发者提供了自定义数据类型的能力。本文将介绍如何定义结构体、如何使用指针操作结构体、如何通过元组返回多个值等内容…...

集成电路学习:什么是SDK软件开发工具包
SDK:软件开发工具包 SDK,即Software Development Kit(软件开发工具包),是一套由软件提供商或其他组织提供的开发工具集合。这些工具旨在帮助开发者更快速、更便捷地创建、测试和部署软件应用程序。以下是对SDK的详细解…...
java后端如何发送http请求
用java后端发送请求需要用到的一个工具包为HttpClient。HttpClient是Apache的一个子项目,是高效的、功能丰富的支持HTTP协议的客户端编程工具包。 引入依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&…...

装WebVideoCreator记录
背景,需要在docker容器内配置WebVideoCreator环境,配置npm、node.js WebVideoCreator地址:https://github.com/Vinlic/WebVideoCreator 配置环境,使用这个教程: linux下安装node和npm_linux离线安装npm-CSDN博客 1…...
【编程底层思考】什么是GC Roots
在Java虚拟机(JVM)中,GC Roots是垃圾收集(Garbage Collection,GC)过程中的起点,用于确定对象是否可被回收。GC Roots集合是一组必须活跃的(即必须保留在内存中的)引用&am…...

[STL --stack_queue详解]stack、queue,deque,priority_queue,容器适配器
stack stack介绍 1、stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2、stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供…...

240907-Gradio插入Mermaid流程图并自适应浏览器高度
A. 最终效果 B. 示例代码 import gradio as grmermaid_code """ <iframe srcdoc <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width" />…...

ubuntu 安装python3 教程
本篇教程,主要介绍如何在Ubuntu上安装python3教程。 1、查看是否有python 在安装前,首先看看自己系统上,是否存在python环境,可能有些系统,默认就安装过python,如果已经有python了,可以直接跳过安装教程。 2、安装步骤 apt update && apt install -y python3 p…...
NOR Flash、NAND Flash……
存储类型描述Compact Flash一种用于便携式电子设备的数据存储设备,于1994年由SanDisk公司推出。SRAM静态随机存取存储器,不需要刷新电路即能保存数据,速度快但集成度低、功耗大。PSRAM伪静态随机存取存储器,结合了SRAM和DRAM的特点…...
【高性能代码】提高代码的性能有哪些方式,如何写出高性能代码,一段代码如何提高这段代码的执行性能,高性能代码开发
【高性能代码】提高代码的性能有哪些方式,如何写出高性能代码,一段代码如何提高这段代码的执行性能,高性能代码开发 提高代码的性能是软件开发中一个重要的方面,尤其是在处理大数据、高并发或实时性要求较高的应用时。以下是一些提…...

2024整理 iptables防火墙学习笔记大全_modepro iptables
Iptables名词和术语 2iptables表(tables)和链(chains) 2表及其链的功能 2 Filter表 2 NAT表 2 MANGLE表 2iptables的工作流程 3iptables表和链的工作流程图 3 二、 iptables实战应用 4iptables命令参数详解 4 iptable…...

实验记录 | 点云处理 | K-NN算法3种实现的性能比较
引言 K近邻(K-Nearest Neighbors, KNN)算法作为一种经典的无监督学习算法,在点云处理中的应用尤为广泛。它通过计算点与点之间的距离来寻找数据点的邻居,从而有效进行点云分类、聚类和特征提取。本菜在复现点云文章过程ÿ…...
【OJ】常用技巧
1. 模版 #include<bits/stdc.h> using namespace std;int main(){ios::sync_with_stdio(false);cin.tie(0);// write herereturn 0; }2. 填充数组 memset是一个字节一个字节填充,如果是使int类型填充非0或者-1就会报错,如 int a[100]; memset(a…...
Redis:Redis性能变慢的原因
一、淘汰策略性能问题 当使用Redis当作缓存使用时,通常会给这个实例设置内存上限maxmemory,然后设置一个数据淘汰策略;如果Redis实例设置了内存上限maxmemory,那么也有可能导致Redis变慢。 原因在于,当Redis内存达到…...

Linux多线程——利用C++模板对pthread线程库封装
文章目录 线程封装主要框架线程启动线程等待其他信息 测试函数 线程封装 我们之前介绍过pthread的线程库,这个线程库主要是基于C语言的void*指针来进行传参和返回 我们使用C的模板对其封装可以让他的使用更加方便,并且经过测试可以让我们更加直观的了解…...

SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序)
SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序) RabbitMQ常见问题解决方案问题一:消息丢失的解决方案(1)生成者丢失消息丢失的情景解决方案1…...

TensorRT-LLM高级用法
--multi_block_mode decoding phase, 推理1个新token, 平时:按照batch样本,按照head,将计算平均分给所有SM; batch_size*num_heads和SM数目相比较小时:有些SM会空闲;加了--multi_block_mode&…...

文心一言功能新升级:读文档、懂翻译、能识图
9月4日,百度文心一言官网显示,在向全社会开放一周年之际,文心一言进行了功能最新全面升级,同时在周年期间为新老会员增加1个月专业版免费使用体验。 据了解,针对网页版用户需求,文心一言实现了创作内容更加…...
C++机试——走方格的方案
题目 请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)从棋盘左上角出发沿着边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...