基于STM32F103ZET6 HC_SR04超声波测距模块
这是最后的实验现象,改变不同的角度即可测得距离
板子 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超声波测距模块的更多相关文章
- [自娱自乐] 4、超声波测距模块DIY笔记(四)——终结篇·基于C#上位机软件开发
前言 上一节我们已经基本上把超声波硬件的发射和接收模块全部做好了,接下来我们着手开发一个软硬结合的基于C#的平面定位软件! 目录 一.整体思路 二.效果提前展示 2-1.软件部分展示 2-2.硬件部分 ...
- [自娱自乐] 3、超声波测距模块DIY笔记(三)
前言 上一节我们已经研究了超声波接收模块并自己设计了一个超声波接收模块,在此基础上又尝试用单片机加反相器构成生成40KHz的超声波发射电路,可是发现采用这种设计的发射电路存在严重的发射功率太低问题,对 ...
- [自娱自乐] 2、超声波测距模块DIY笔记(二)
前言 上一节我们已经大致浏览下目前销售的超声波测距模块同时设计了自己的分析电路,这次由于我买的电子元件都到了,所以就动手实验了下!至写该笔记时已经设计出超声波接收模块和超声波发射模块,同时存在超声波发 ...
- 基于FPGA的超声波测距(一)
硬件平台:CycloneII EP2C5Q208C8+DYP-ME007 1:超声波原理 DYP-ME007超声波测距模块可提供3cm--3.5m的非接触式距离感测功能,图1为DYP-ME007外观, ...
- STM32—驱动HC-SR04超声波测距模块
文章目录 超声波测距原理 HC-SR04工作原理 STM32实现驱动 1.引脚的配置 2.时序控制 3.时间差测量 4.如何将距离测出来 超声波测距原理 利用HC-SR04超声波测距模块可以实现比较精 ...
- loto示波器实践——超声波测距模块
我们这里用到的超声波测距模块,一般是用于arduino智能小车自动避障的.经常见到的应用是使用单片机或者stm32和这种模块结合进行开发的. 我们使用LOTO示波器可以更直观和快速的看到超声波测量距离 ...
- 树莓派 HC-SRO4超声波测距模块的使用
先上个图 这个模块的针脚跟之前玩的那三个有所区别,除了VCC和GND两个针脚,还多了两个Trig和Echo针脚,分别是输出和输入,Trig我接的是20针脚,Echo是21 该模块的工作原理为,先向TR ...
- 张高兴的 Windows 10 IoT 开发笔记:HC-SR04 超声波测距模块
HC-SR04 采用 IO 触发测距.下面介绍一下其在 Windows 10 IoT Core 环境下的用法. 项目运行在 Raspberry Pi 2/3 上,使用 C# 进行编码. 1. 准备 H ...
- Arduino 控制超声波测距模块
一.实物图 二.例子代码 用到数字2 和3 引脚,还有两个就是vcc GND两个阴脚,用模块连线比较简单
随机推荐
- C#Owin auth20开发 OwinStartup 不会触发的解决办法
在使用owin auth20设置token时候遇到一个问题.项目中已经存在如下初始化配置类 using Microsoft.Owin; using Owin; [assembly: OwinStart ...
- CSS 小结笔记之背景
背景相关属性主要有: background-color 背景颜色 background-image 背景图片 background-repeat 是否平铺 repeat (默认平铺) | repea ...
- 【日常记录】用 vs2015 编译 love2d 引擎时出现 依赖项目luajit编译失败的解决办法
如图片所示,提示是没有找到cmake命令.看来是需要camke软件支持的,由于当初安装CMake后我重装了系统,也没有把cmake的bin路径 解决办法一:重新安装CMake,并勾选上"ad ...
- 1.Junit test使用
1.导入maven依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</arti ...
- 解决国外模板h1、h2、h3...不显示中文文章标题的问题
如果你经常用国外好看的网页模版时候,会遇到不显示中文文章标题的情况,显示英文标题却正常.遇到这个情况很多人认为应该修改CSS的font-family的字体,其实这是错误的,与CSS无关. 出现这种情况 ...
- 【Kettle】8、变量参数传递介绍
本文为转载,感觉作者的辛勤劳作:http://blog.csdn.net/rotkang/article/details/21008271 ------------------------------ ...
- 转:HTTP Status 404(The requested resource is not available)的几种解决方法
原文地址 原因:servlet没有配置正确 ,查看web.xml确认正确,以及自己的请求路径正确 在IE中提示“404”错误有以下三种情况 1.未部署Web应用 2.URL输入错误 排错方法: 首先, ...
- Sublime Text 3 调用cmd运行c、java、python、batch file
一.调用cmd运行c(首先复制MinGW到C盘根目录,并添加环境变量) Tools --> Build System --> New Build System 删除所有内容 复制如下代码进 ...
- 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入
一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...
- 【ASP.NET】#001 获取服务器IP
客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString(); 客户端主机名: Request.ServerVariab ...