这是最后的实验现象,改变不同的角度即可测得距离

板子 PZ6806L 超声波模块 HC_SR04

HC_SR04模块讲解

通过该超声波模块说明书,可明白供电需VCC 5V  还需GND  ECHO(回响信号)  TRIG(触发信号)

也就是说总共需要4根线,其中VCC和GND只需要接到开发板上的5V电源和GND即可

这是我的接线图

ECHO 使用的是PC3引脚,TRIG 使用的是PC2引脚

PC3和PC2只是普通的引脚,没任何特殊性,可凭自己想法配置不同的引脚

从超声波时序图看出,若想能够使用该模块,

1 使用你要触发信号拉高10us以上

2 接着模块内部自己发出8个40khz脉冲,不需要管,接着模块会输出回响信号,而回响信号高电平的

脉冲宽度,与距离成正比

以上知道这些就可以正常使用,至于距离公式后面会再解释

注意:

接着就是代码部分,主函数最后再介绍

HC_SR04配置函数及ECHO高电平时间

首先是头文件

配置一个变量 time,用于存储回响信号高电平的时间

void hc_sr04_init(void); 该函数是引脚的配置函数

float  Get_hcsr04length(void);该函数是用来发送触发信号,并得到回响信号的高电平时间

void hc_sr04_init(void)
{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC ,ENABLE);//打开GPIOC的时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//配置引脚2,trig触发信号
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//配置为推挽输出
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_ResetBits(GPIOC,GPIO_Pin_2);//触发信号,首先把它拉低,避免额外影响

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//配置引脚3,echo回响信号
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//配置为模拟输入
GPIO_Init(GPIOC, &GPIO_InitStructure);//echo信号
GPIO_ResetBits(GPIOC,GPIO_Pin_3);//也同样拉低
}

float Get_hcsr04length(void)
{
GPIO_SetBits(GPIOC,GPIO_Pin_2);
delay_us(20);
GPIO_ResetBits(GPIOC,GPIO_Pin_2); //TRIG发送触发信号,延时10us以上就可以了

while(PCI(3)==0) //当echo一直是低电平的时候,就清空,并且关闭计时器
{
TIM_SetCounter(TIM2, 0);
TIM_Cmd(TIM2,DISABLE);
}
while(PCI(3)==1)//一旦echo被拉高了,就说明模块传需要的数据回来了,打开计时器
{
TIM_Cmd(TIM2,ENABLE);
}
time=TIM_GetCounter(TIM2);//当被拉高的echo再次变回低电平时,将计时器的值赋给time
return time;//返回time
}

计时器函数的配置

void TIM_Counter(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能TIM2的时钟

TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = 71;//72MHx/72=1us,
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);
TIM_Cmd(TIM2,DISABLE);//关闭,需要的时候再打开
}

部分主函数

int main(void)
{

float Distance=0;//存储距离
delay_init(72); //配置滴答计时器
RCC_Configuration();//时钟配置
GPIO_Configuration();//GPIO配置,只是PC0(LED0),用来提示系统正常运行
TIM_Counter();//计时器的配置
USART1_Configuration();//串口配置,
hc_sr04_init();//HC_SR04初始化配置好(即PC2,PC3的配置)

  while(1)
  {
GPIO_ResetBits(GPIOC,GPIO_Pin_0);//提示系统正常运行进该循环

Distance =(Get_hcsr04length()*340/2/1000);//从函数得到距离值,340是声音的速度,除于2,是因为声波发出到接收,是一次来回,除于1000,是将距离定为mm(毫米),该函数返回的就是之前time的值
printf("距离是%.2f\r\n",Distance);
delay_ms(1000);//延时1秒钟,这样不会输出太过频繁
  }
}

这是我的工程文件

百度网盘  密码 v3y7

https://pan.baidu.com/s/1MNVf70_gnZ5aqSm6XInrMA

如有需要,可结合自己板子修改下代码即可使用,欢迎交流,咱们共同进步

转载于:https://www.cnblogs.com/zzlloveyty/p/10696656.html

基于STM32F103ZET6 HC_SR04超声波测距模块相关推荐

  1. STM32学习笔记4——HC_SR04超声波测距模块的调试记录

    项目场景: STM32F103单片机和HC_SR04超声波测距模块测量距离. 其中HC_SR04模块采用5V供电. 问题描述: 代码编写完成以后,HC_SR04超声波测距模块传递模块返回来的高电平一直 ...

  2. 基于DE2 115开发板驱动HC_SR04超声波测距模块【附源码】

    目录 1. 实验平台与目的 2. 实验要求 3. 实验原理 3.1. 理论原理 3.2. 硬件模块时序图 4. 系统架构设计 5. 模块说明 5.1. hc_sr_driver端口信号列表 5.2. ...

  3. 基于HC-SR04的超声波测距模块

    目录 前言: HC-SR04硬件概述: HC-SR04引脚介绍: HC-SR04的超声波测距模块工作原理: 软件设计: 超声波初始化函数:(代码如下) 超声波测距模块:(代码如下) 前言: 2022. ...

  4. 超声波测距模块HC_SR04(基于STM32) 工作原理/代码

    文章目录 产品说明 产品特点 基本工作原理 实物图 电气参数 时序图 使用指导,代码配置 明确IO口,对高低电平进行宏 中断处理 模块功能函数 测距平衡修复 产品说明 产品特点 HC-SR04超声波测 ...

  5. 51单片机 普中V2 超声波测距 报警 显示 基于MCS51单片机的超声波测距模块的开发

    基于MCS51单片机的超声波测距模块的开发 采用C51程序设计语言,完成下列功能要求. l 必选功能: (1) 超声波模块和单片机的接口设计,画出完整的电路原理图.(15分) (2) 开发板上电时,显 ...

  6. STM32单片机基于HAL库开发HC-SR04 超声波测距模块(终极版)

    参考: 某宝HC-SR04 超声波测距模块商品详情页 STM32L051C8T6 HAL库 输入捕获进行超声波测距 案例 STM32CubeMX学习笔记3--TIM2输入捕获(SR-04测距) cub ...

  7. 51单片机项目设计:基于超声波的 车库停车系统、车位检测系统设计(8个超声波测距模块)keil+protues仿真

    基于51单片机的车库停车系统 代码仿真资料链接https://download.csdn.net/download/mbs520/12742296 一.设计要求: 毕业设计原题: 本设计主要用于室内停 ...

  8. 超声波测距模块HC-SR04详解(基于51单片机)

    本篇文章是个人整理的包含超声波测距模块HC-SR04的基本介绍与基本工作原理以及分别通过LCD1602.数码管和串口显示距离的实例讲解与代码的笔记,部分内容来自<HC-SR04超声波测距模块说明 ...

  9. 基于51单片机的超声波测距模块

    实现功能 通过超声波模块进行测距显示在LCD1602上并通过设在程序上设置上下限进行进行超出上下限的报警蜂鸣器 模块 1.89c51 2.lcd1602 3.超声波测距模块 4,蜂鸣器 作者用的是51 ...

最新文章

  1. 使用OpenCV,Numpy计算直方图,Matplot绘制直方图及分析
  2. 关于未来的蝴蝶效应,《崛起的超级智能》创作有感
  3. 用linux运行sublime,在Deepin Linux上用Sublime Text3配置GoLang开发环境
  4. Actuator 端点监控
  5. OS / 几个常用的操作系统进程调度算法
  6. python蟒蛇绘制 C
  7. 前端学习(571):margin负值下的两栏自适应
  8. Thrift 个人实战--Thrift 网络服务模型
  9. 嵌入式linux学习
  10. 如何才能轻松地分析日志?
  11. python连接oracle报错tns_Python3操作oracle数据库及遇到的报错
  12. 亮点抢先看,华为云 TechWave 大数据专题日有啥料?
  13. 51nod 1005 1027 1029 高精度
  14. 《SVN系列教程-第五章-IDEA集成SVN的使用》
  15. 复习笔记——物联网通信技术判断
  16. 高级计算机程序员实操题,国家计算机软考高级程序员历年真题1990.doc
  17. RxBus 使用及原理分析
  18. 数字孪生智慧医院:构建三维医疗看板可视化管理平台(四)
  19. 2021-09-18 Android repo 镜像服务器搭建
  20. 极米投屏h2服务器响应失败,极米h2升级断电后怎么办?是修还是换一台当贝投影F3?...

热门文章

  1. 010_CSS后代选择器
  2. 005_CSS通配符选择器
  3. 001_支持并发的两次判空懒汉单例
  4. android杀死进程
  5. oracle 概要文件不存在,oracle 概要文件 - kecy1217的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  6. 笔记本显示器仅计算机,将笔记本电脑(仅一个HDMI接口)连接到双屏幕(谨慎使用)的解决方案...
  7. JavaScript 知识图谱
  8. 第一篇:Mysql数据类型
  9. shell的建立与执行实验报告_实验指导书--实验02 Linux Shell用户接口
  10. 取消管理员取得所有权_win7管理员取得所有权批处理 - 卡饭网