STM32——库函数版——超声波测距模块
HC-SR04 超声波测距模块
一、基本工作原理
1.主控板先向Trig控制端输入至少10us的高电平触发信号,
2.该模块内部将发送出8个40KHz的方波并检测回波信号,
3.一旦检测到有回波信号则Echo接收端输出高电平回响信号,高电平的持续时间就是超声波从发射到返回的时间。(回响信号的脉冲宽度与所测的距离成正比)
4.公式:距离=高电平时间*声速(340M/S)/2
二、HC-SR04图片
三、驱动原理及程序
方法一:
在向Trig控制端发送触发信号后,等待Echo引脚响应后(上升沿或者下降沿)触发外部中断,开启定时器计时直到Echo引脚变为低电平,关闭定时器记录下计时时间,在通过公式进行计算出具体距离。
程序
超声波引脚配置
hc-sr04.c
#include "hc-sr04.h"
#include "tim.h"
#include "delay.h"
#include "Printf.h"/*2020.11.16
* HC-SR04超声波测距模块
* 基本工作原理:* 给TRIG引脚至少10us的高电平信号触发测距* 模块自动发送8个40KHz的方波,自动检测是否有信号返回* 有信号返回,通过Echo引脚输出一个高电平,高电平的持续时间就是超声波从发射到返回的时间* 测量距离 = (高电平的持续时间 * 声速(340m/s))/ 2
*/#define HC_SR04_TRIG_CLK RCC_APB2Periph_GPIOA //脉冲触发TRIG端口
#define HC_SR04_TRIG_PORT GPIOA
#define HC_SR04_TRIG_PIN GPIO_Pin_4#define HC_SR04_ECHO_CLK RCC_APB2Periph_GPIOA //回波接收ECHO端口
#define HC_SR04_ECHO_PORT GPIOA
#define HC_SR04_ECHO_PIN GPIO_Pin_5float Distance; //测的距离值//HC_SR04超声波初始化
void HC_SR04_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(HC_SR04_TRIG_CLK, ENABLE); //使能PA端口时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//外部中断,需要使能AFIO时钟GPIO_InitStructure.GPIO_Pin = HC_SR04_TRIG_PIN; // 脉冲触发端口(Trig)配置PA4GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHzGPIO_Init(HC_SR04_TRIG_PORT, &GPIO_InitStructure); //根据设定参数初始化端口GPIO_InitStructure.GPIO_Pin = HC_SR04_ECHO_PIN; // 回波接收端口(Echo)配置PA5GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //上拉输入GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHzGPIO_Init(HC_SR04_ECHO_PORT, &GPIO_InitStructure); //根据设定参数初始化端口//接收端口 中断线以及中断初始化配置GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource5);EXTI_InitStructure.EXTI_Line=EXTI_Line5;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//上升沿触发EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键所在的外部中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //子优先级1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道NVIC_Init(&NVIC_InitStructure);TIM3_Int_Init(49999,7199); //初始化TIM3定时器,计数一次为1/10000S(0.1ms)}//发送20us的脉冲触发信号
void HC_SR04_start(void)
{GPIO_SetBits(HC_SR04_TRIG_PORT,HC_SR04_TRIG_PIN); //TRIG置高delay_us(20);GPIO_ResetBits(HC_SR04_TRIG_PORT,HC_SR04_TRIG_PIN); //TRIG置低delay_ms(10);
}void EXTI9_5_IRQHandler(void)
{ delay_us(10);if(EXTI_GetITStatus(EXTI_Line5) != RESET) //检测外部中断触发5请求是否发生{//while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5) == RESET);TIM_SetCounter(TIM3,0); //计数清零TIM_Cmd(TIM3,ENABLE); //使能TIM3定时器while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5)); //等待电平变为低电平TIM_Cmd(TIM3,DISABLE); //关闭定时器//获取TIM3计数器的值Distance = TIM_GetCounter(TIM3)* 340/200.0; //计算距离:cnt * 1/10000 * 340 / 2(单位:m)//printf("Counter:%d\n",TIM_GetCounter(TIM3));printf("测的距离: %f cm \r\n",Distance);EXTI_ClearITPendingBit(EXTI_Line5); //清除 EXTI 线路挂起位}
}
hc-sr04.h
#include "sys.h"//HC_SR04超声波初始化
void HC_SR04_Init(void);
//发送20us的脉冲触发信号
void HC_SR04_start(void);float Senor_Using(void);
main.c
#include "sys.h"
#include "delay.h"
#include "hc-sr04.h"
#include "usart.h"
#include "Printf.h"
#include "tim.h"int main(void)
{ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //系统时钟设置PLL作为系统时钟delay_init(); //初始化延时函数uart_init(115200);printf("开始测量距离\r\n");/*Echo引脚需要接收并记录高电平的持续时间。在发送触发信号后,Echo响应后(上升沿)触发外部中断,开启定时器计时直到Echo变为低电平,关闭定时器记录下计时时间*/HC_SR04_Init(); //HC_SR04超声波初始化配置HC_SR04_start(); //发送20us的脉冲触发信号//while(1);}
串口通信程序自己添加一下吧,我这就不添加了
STM32——库函数版——超声波测距模块相关推荐
- STM32—驱动HC-SR04超声波测距模块
文章目录 超声波测距原理 HC-SR04工作原理 STM32实现驱动 1.引脚的配置 2.时序控制 3.时间差测量 4.如何将距离测出来 超声波测距原理 利用HC-SR04超声波测距模块可以实现比较精 ...
- STM32智能小车------超声波测距模块
文章目录 一.原理讲解 1.实物图 2.工作原理: 3.接线: 二.软件驱动代码 1.接口定义 2.驱动函数 总结 最终效果 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的普通大学生. 进 ...
- 我的stm32学习——HC-SR04超声波测距模块
一.前言 从大一开始一直有着写点东西的想法,如今即将迈入大三,却迟迟没有动笔.没有太多的借口,就是懒,"间歇性的踌躇满志,持续性的混吃等死"说的就是我本人啦.前不久刷微信看到同学在 ...
- 【STM32】 STM32驱动URM04超声波测距模块
URM04简介: URM04采用了RS485串行通信总线的架构,支持多传感器的并行工作,有着两个RS-485接口,最多支持32个超声波的并联, 内置温度传感器辅助校正距离值,同时支持温度的测量 应用场 ...
- STM32单片机基于HAL库开发HC-SR04 超声波测距模块(终极版)
参考: 某宝HC-SR04 超声波测距模块商品详情页 STM32L051C8T6 HAL库 输入捕获进行超声波测距 案例 STM32CubeMX学习笔记3--TIM2输入捕获(SR-04测距) cub ...
- stm32控制超声波测距模块HC-SR04
引脚:PB15 TRIG,PB0 ECHO: 不同距离,LED对应不良.闪烁.亮状态,并通过串口发送到PC; TIM3定时中断,测出脉宽长度,没有像野火一样使用捕捉功能: 1.HS-SR04模块实物图 ...
- HC-SR04超声波测距模块使用方法和例程(STM32)
基于STM32和HC-SR04模块实现超声波测距功能 最近在学STM32做个简单的应用实践一下,顺便水一篇文章. 本文用的单片机是STM32F103C8T6,超声波测距模块是HC-SR04,显示测距结 ...
- 学习并使用HC-SR04超声波测距模块+STM32
** 超声波测距原理 ** 参考博客: https://blog.csdn.net/qq_40734815/article/details/105992801 https://blog.csdn.ne ...
- STM32蓝牙控制循迹避障小车源代码——3.舵机、超声波测距模块
STM32蓝牙控制循迹避障小车源代码--3.舵机.超声波测距模块 注意-所需模块: US-015超声波模块 SG90舵机云台 接线:舵机超声波: A1–P2.7 B8–Trig B9–Echo 代码 ...
- STM32——超声波测距模块(HAL库CubeMx)
超声波测距 1. 超声波测距模块原理 2. CubeMx配置 3. 代码的编写 3.1 定时器计时的计算 3.2 接口函数 1. 超声波测距模块原理 (2021/11/28 16:25编辑) 超声波测 ...
最新文章
- 3D MinkowskiEngine稀疏模式重建
- 国民认证科技有限公司助力构建我国可信网络空间
- chart.Correlation绘制相关性热图
- cytoscape绘图互作网络图(二)
- 编程面试的10大算法概念汇总
- 汇编语言整数加减法示例
- 预告:大牛现身说法 TensorFlow在工程项目中的应用 | AI 研习社
- linux云服务终端提示符显示-bash-4.2#解决方法
- 奥鹏教育计算机试题,最新奥鹏教育《计算机基础》模拟试卷附答案(11页)-原创力文档...
- java c++ python哪个好_程序员学java好还是python语言好 c++又如何
- com.sun.jersey.api.client.UniformInterfaceException:returned a response status of 403
- Linux 基本命令(十)--grep 常用命令
- 使用apktool.jar工具反编译和回编译Android APK 终端命令模式
- 学习FFmpeg API – 解码视频
- Windows 实用小工具
- 浏览器是如何工作的:Chrome V8让你更懂JavaScript
- 三阶矩阵的lu分解详细步骤_lu分解(笔算矩阵lu分解步骤)
- python实现遗传算法
- 数独游戏(回溯算法)
- 在vscode编辑器中,vetur和volar冲突
热门文章
- 华为主题锁屏壁纸换不掉_华为手机中的这些默认设置一定要改,不然会导致手机卡顿加快耗电...
- python热成像_matplotlib实现热成像图colorbar和极坐标图的方法
- python中换行的转义字符_Python语言中表示换行的转义字符是____________。(2.5分)_学小易找答案...
- linux 创建软连接_linux删除原理
- 【转】Element-UI中上传的action地址相对问题
- C# MysqlHelper 执行reader时,遇到致命错误或者超时
- 【leetcode】1041. Robot Bounded In Circle
- ceph luminous 版本 osd掉线处置
- intra调用order
- spring mvc静态资源放行