超声波模块HC-SR04

  • 一、简介
    • 1.概念
    • 2.电路连接
    • 3.工作原理
  • 二、STM32CubeMX配置步骤
    • 1.芯片选择
    • 2.引脚配置
    • 3.时钟配置
    • 4.其他配置
  • 三、keil5代码
    • 1.串口重定向
    • 2.超声波模块编写

一、简介

1.概念

HC-SR04超声波测距模块可提供2em-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。

2.电路连接

3.工作原理


以上时序图表明你只需要提供一个10uS 以上脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。
公式:距离=高电平时间*声速(340M/S)/2;
建议测量周期为60ms 以上,以防止发射信号对回响信号的影响。
注:
1.此模块不宜带电连接,若要带电连接,则先让模块的GND端先连接,否则会影响模块的正常工作。
2.测距时,被测物体的面积不少于0.5平方米且平面尽量要求平整,否则影响测量的结果
3.VCC3.3V高电平可能无法使模块工作,建议使用5V

二、STM32CubeMX配置步骤

首先创建一个空文件夹,用来存放项目。项目的文件路径中不能含有中文,项目名称也尽量使用英文

1.芯片选择

1.打开STM32CubeMX软件,选择File→New Project,在Part Number中输入自己的单片机型号,之后点击Start Project。我选择的是STM32F103C8T6,可根据自己的需求进行选择。

2.引脚配置

我使用的是J-Link下载器,因此除了配置超声波模块的引脚外,还需要配置下载代码所需的串口。
a.串口配置
根据查询芯片手册,可知串口1的引脚。

点击PA9,选择USART1_RX
点击PA10,选择USART1_TX

引脚为黄色,点击Connectivity→USART1,选择模式为异步通信,引脚变为正常绿色。

b.超声波模块引脚配置
在配置超声波模块引脚时,只需配置它的发射和接收引脚,一般不使用且没有特殊功能的引脚都可以进行配置,我使用的是PA6和PA7。
将PA6设置为输入模式,作为回响信号Echo

将PA7设置为输出模式,作为触发信号Tring

PA6和PA7的具体配置如下图

3.时钟配置

a.系统时钟配置
点击Clock Configuration,进入时钟配置,此时需要查看芯片具体手册,可知工作频率为72MHz



b.精准延时定时器配置
点击TIM1也可根据需要选择不同的定时器,定时事件为1us


TIM1挂载在APB2上,通过时钟查询最高为72MHz

分频计算:

因此Prescaler (PsC-16 bits value)=72-1

启用NVIC

4.其他配置



做完以上步骤就可以生成代码了,之后打开项目。

三、keil5代码

1.串口重定向

在以下位置编写重定向函数

//printf函数重定向
int fputc(int ch,FILE *f)
{uint8_t temp[1]={ch};HAL_UART_Transmit(&huart1,temp,1,2);return 0;
}

注意头文件的引用

/* USER CODE BEGIN 0 */
#include "stdio.h"
#include <string.h>
/* USER CODE END 0 */

2.超声波模块编写

在main.c中/* USER CODE BEGIN 4 /与/ USER CODE END 4 */间编写超声波监测代码及精准延时
a.超声波监测

//获取超声波模块的检测距离
uint32_t csb_get_distance(void)
{uint32_t CSB_value = 0 ;//给发射引脚一个高电平HAL_GPIO_WritePin(CSB_Trig_GPIO_Port, CSB_Trig_Pin, GPIO_PIN_SET);//延时10us以上TIM1_Delay_us(20);//给发射引脚一个低电平HAL_GPIO_WritePin(CSB_Trig_GPIO_Port, CSB_Trig_Pin, GPIO_PIN_RESET);//等待接收引脚变成高电平while( HAL_GPIO_ReadPin(CSB_Echo_GPIO_Port,CSB_Echo_Pin) == 0);//设置定时器初始值为0__HAL_TIM_SetCounter(&htim1, 0);//开始计时__HAL_TIM_ENABLE(&htim1);//接收完全后不再为高电平,即当接收引脚变成低电平后,停止计时,获取计数时间while( HAL_GPIO_ReadPin(CSB_Echo_GPIO_Port,CSB_Echo_Pin) == 1);  //获取定时器的计数值,赋值操作  a = b;CSB_value = __HAL_TIM_GetCounter(&htim1);//停止计时__HAL_TIM_DISABLE(&htim1);//已知高电平总时间,即可利用公式( 测试距离= (高电平时间*声速(340M/S))/2 ),计算超声波模块距离障碍物的单程距离;//如果需要返回 毫米级别距离,公式为( 测试距离= (高电平时间*声速(340M/1000mS))/2 )return ( CSB_value*340/1000/2);
}

b.精准延时1us

//使用TIM1来做us级延时函数,此函数为1us
void TIM1_Delay_us(uint16_t n_us)
{__HAL_TIM_SetCounter(&htim1, 0);//htim1/* 开启定时器1计数 */__HAL_TIM_ENABLE(&htim1);//获取定时器的计数值!!!再判断计数值,但是计数值不得大于定时器配置的重装载值。\假如:定时器设定的重装载值为65536-1, 比较值需小于重装载值,即(计数1次 * n_us)-1) 小于(65536-1)\即传进来的参数n_us需要小于65536-1;  while(__HAL_TIM_GetCounter(&htim1) < ((1 * n_us)-1) );/* Disable the Peripheral */__HAL_TIM_DISABLE(&htim1);
}

在主函数/* USER CODE BEGIN 3 /与/ USER CODE END 3 */间编写读取超声波监测距离。

  /* USER CODE BEGIN 2 */int distance;/* USER CODE END 2 */
 distance = csb_get_distance(); printf("超声波检测到的距离为:%dcm\n",    distance/10);

之后进行编译下载即可。
结果

项目工程及源代码

(STM32CubeMX)超声波模块测距传感器学习笔记相关推荐

  1. 用8266学习单片机-13-HC-SR04超声波模块测距示例-Ultrasonic-US-015

    HC-SR04原理 重点 5v供电.Tri引脚需要至少10us的高脉冲去触发.Echo返回的是超声波发射到返回的时间 距离怎么算看上面第三张图,US-015原理相似,注意测量范围最小值和最大值 接线 ...

  2. 快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上

    文章目录 快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上 实现效果: 模块说明: 引脚接线方法: 程序源码 附录 快速上手Arduino – 打印超声波模块测距信息到OLED屏幕 ...

  3. 树莓派超声波模块测距

    参考:树莓派超声波模块测距及C语言demo 作者:一只青木呀 发布时间: 2020-07-22 16:54:16 网址:https://blog.csdn.net/weixin_45309916/ar ...

  4. 超声波模块测距 Arduino代码

    1.本篇是记录关于使用超声波模块测距的记录,本次使用的超声波测距模块(HC-SR04)探测角度为<5°  宽电压工作在3.3~5V之间,最大测距为7m. 在Arduino中定义引脚,距离变量等. ...

  5. STM32超声波模块测距串口输出/通用定时器中断并输出PWM控制舵机/系统定时器延时

    参考:stm32 超声波模块 原理 实现测距 +舵机使用 作者:点灯小哥 发布时间: 2021-03-10 19:37:16 网址:https://blog.csdn.net/weixin_46016 ...

  6. Verilog语法-模块module[Day2学习笔记]

    1概述 Verilog HDL是一种用于数字逻辑电路设计的硬件描述语言,可用来进行数字电路的仿真验证.时序分析.逻辑综合. 用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型 ...

  7. 32、树莓派的简单测试串口通信和超声波模块测距

    基本思想:随手记录一下众灵科技树莓派的测试串口通信和超声波模块,其镜像还是很nice,基本的库都给你安装了,比较大 链接:https://pan.baidu.com/s/11tMdoRh3bHmcYz ...

  8. STM32 超声波模块测距

    目录 HC-SR04模块 HC-SR04超声波测距模块工作原理 HC-SR04超声波模块的时序触发图 思路步骤 代码 实验结果 总结 HC-SR04模块 HC-SR04超声波测距模块工作原理 (1)采 ...

  9. 关于HC04超声波模块测距的思考(51版)

    之前写过一篇HC04的使用文章,当时是使用stm32来实现的,原文链接. 后来又多次使用51来驱动这个模块,有时候有测距需要,使用了几次,总是感觉我上次那个程序不是很好, 所以这次对它进行了改进.虽然 ...

  10. 关于HC04超声波模块测距的进一步思考(51版)

    之前写过一篇HC04的使用文章,当时是使用stm32来实现的,原文链接. 后来又多次使用51来驱动这个模块,有时候有测距需要,使用了几次,总是感觉我上次那个程序不是很好,所以这次对它进行了改进.虽然上 ...

最新文章

  1. 美多商城之订单(我的订单)
  2. httpsrequest java_java 发送http和https请求的实例
  3. vscode linux版下载地址
  4. 轻量级ORM框架Dapper应用四:使用Dapper返回多个结果集
  5. 发现在创建云服务器ecs实例的磁盘快照时_玩转ECS第7讲|ECS数据保护-数据备份新特性与最佳实践...
  6. chrony软件使用说明
  7. java 反射 镜子,java反射机制 - 巍巍的个人页面 - OSCHINA - 中文开源技术交流社区...
  8. 从初级程序员逆袭为技术大牛,你需要懂这 10 项技术!
  9. os模块,序列化模块,json模块,pickle模块
  10. 安卓开发之刮刮乐实例教程
  11. H5 表格标签基本使用
  12. python如何制作一个任意列表_我要悄悄学Python之列表(一)
  13. 如何在计算机命令内转换操作盘,如何在命令行窗口中从驱动器C切换到驱动器D...
  14. 解决idea工具下tomcat中文乱码问题
  15. EtherCAT网线选型标准
  16. python 设计单张扑克牌类Card 设计整副扑克牌类Cards
  17. QT QColor颜色选择器学习
  18. c语言添加删除课程的思路,基于C语言实现学生选课系统
  19. java打印数组的连续非空子集_求一个字符串数组所有非空子集
  20. css3 3d头像,Three.js 3D头像

热门文章

  1. nods中mysql时间相差8小时
  2. java节假日算法_java节假日
  3. Photoshop教程五:图层混合模式
  4. 从哪里寻找游戏工具集(Game dev toolset)开发的资料?
  5. Excel里怎么设置输入可以打钩的选择框?
  6. 互联网常见34个术语解释
  7. 华为进不了美国,并不是贸易保护这么简单
  8. java 继承的写法_Java 类的继承详解
  9. 配置文件中的后缀dev、test和prod是什么意思
  10. C++复数运算符重载,复数开平方