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

板子 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

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

基于STM32F103ZET6 HC_SR04超声波测距模块的更多相关文章

  1. [自娱自乐] 4、超声波测距模块DIY笔记(四)——终结篇·基于C#上位机软件开发

    前言 上一节我们已经基本上把超声波硬件的发射和接收模块全部做好了,接下来我们着手开发一个软硬结合的基于C#的平面定位软件! 目录 一.整体思路 二.效果提前展示 2-1.软件部分展示 2-2.硬件部分 ...

  2. [自娱自乐] 3、超声波测距模块DIY笔记(三)

    前言 上一节我们已经研究了超声波接收模块并自己设计了一个超声波接收模块,在此基础上又尝试用单片机加反相器构成生成40KHz的超声波发射电路,可是发现采用这种设计的发射电路存在严重的发射功率太低问题,对 ...

  3. [自娱自乐] 2、超声波测距模块DIY笔记(二)

    前言 上一节我们已经大致浏览下目前销售的超声波测距模块同时设计了自己的分析电路,这次由于我买的电子元件都到了,所以就动手实验了下!至写该笔记时已经设计出超声波接收模块和超声波发射模块,同时存在超声波发 ...

  4. 基于FPGA的超声波测距(一)

    硬件平台:CycloneII EP2C5Q208C8+DYP-ME007 1:超声波原理 DYP-ME007超声波测距模块可提供3cm--3.5m的非接触式距离感测功能,图1为DYP-ME007外观, ...

  5. STM32—驱动HC-SR04超声波测距模块

    文章目录 超声波测距原理 HC-SR04工作原理 STM32实现驱动 1.引脚的配置 2.时序控制 3.时间差测量 4.如何将距离测出来 超声波测距原理 利用HC-SR04超声波测距模块可以实现比较精 ...

  6. loto示波器实践——超声波测距模块

    我们这里用到的超声波测距模块,一般是用于arduino智能小车自动避障的.经常见到的应用是使用单片机或者stm32和这种模块结合进行开发的. 我们使用LOTO示波器可以更直观和快速的看到超声波测量距离 ...

  7. 树莓派 HC-SRO4超声波测距模块的使用

    先上个图 这个模块的针脚跟之前玩的那三个有所区别,除了VCC和GND两个针脚,还多了两个Trig和Echo针脚,分别是输出和输入,Trig我接的是20针脚,Echo是21 该模块的工作原理为,先向TR ...

  8. 张高兴的 Windows 10 IoT 开发笔记:HC-SR04 超声波测距模块

    HC-SR04 采用 IO 触发测距.下面介绍一下其在 Windows 10 IoT Core 环境下的用法. 项目运行在 Raspberry Pi 2/3 上,使用 C# 进行编码. 1. 准备 H ...

  9. Arduino 控制超声波测距模块

    一.实物图 二.例子代码 用到数字2 和3 引脚,还有两个就是vcc GND两个阴脚,用模块连线比较简单

随机推荐

  1. spring测试框架的使用

    junit的使用 1.加入 junit jar包 <dependency> <groupId>junit</groupId> <artifactId>j ...

  2. leading--Oracle hint

    SQL>  explain plan for select rowid rid from  2   scott.emp e where e.empno >100 and e.empno & ...

  3. Others

    1.可迭代对象可以被for循环获取 2.可变与不可变对象 不可变对象:数字 字符串 元组 所谓不可变是值和身份都不变          赋值时开辟新内存空间生成新值 可变    对象:列表 字典 集合 ...

  4. ES6高频面试题目整理

    本篇文章是根据以下内容进行的总结 1.https://segmentfault.com/a/1190000011344301 2.http://www.bslxx.com/a/mianshiti/ti ...

  5. 6.Spring MVC SSM整合问题总结

    1.Cannot find class [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter] for ...

  6. popup定位引擎popper.js介绍

    https://medium.com/@FezVrasta/popper-js-v1-5e8b3acd888c https://survivejs.com/blog/popper-interview/ ...

  7. twemproxy源码分析

    twemproxy是twitter开源的redis/memcached 代理,数据分片提供取模,一致性哈希等手段,维护和后端server的长连接,自动踢除server,恢复server,提供专门的状态 ...

  8. ELT探索之旅2 kettle配置

    java环境变量配置: path增加    ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 双击spoon.bat即可

  9. 用CHTCollectionViewWaterfallLayout写瀑布流

    用CHTCollectionViewWaterfallLayout写瀑布流 实现的瀑布流效果图: 源码: WaterfallCell.h 与 WaterfallCell.m // // Waterfa ...

  10. 制作 OS X El Capitan 启动盘

    制作 OS X El Capitan 启动盘 1. 下载系统盘的dmg格式 2. 直到出现了 3. 在命令行中找到 Install OS X El Capitan.app 4. 格式化你的U盘(U盘名 ...