STM32F103ZET6超声波测距(hcsr04模块)实验
一、硬件连线图
接线描述:
1.供电采+5V,我试了下+3V也是可以的
2. 注意Trig引脚跟Echo引脚不要接错;
二、hcrs04模块测距原理
(1)采用IO口TRIG触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
(4)本模块使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,即可以达到你移动测量的值
三、以上两步骤做正确之后接下来就是编写代码
1.hcrs04.c源文件
#include "hcsr04.h"
#include "sys.h"
#include "delay.h"
#define HCSR04_PORT GPIOB
#define HCSR04_CLK RCC_APB2Periph_GPIOB
#define HCSR04_TRIG GPIO_Pin_5
#define HCSR04_ECHO GPIO_Pin_6
#define TRIG_Send PBout(5)
#define ECHO_Reci PBin(6)
void Delay_Ms(uint16_t time);
void Delay_Us(uint16_t time);
void hcsr04_NVIC();
u16 msHcCount = 0;//ms计数
void Hcsr04Init()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //生成用于定时器设置的结构体
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(HCSR04_CLK, ENABLE);
//IO初始化
GPIO_InitStructure.GPIO_Pin =HCSR04_TRIG; //发送电平引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);
GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);
GPIO_InitStructure.GPIO_Pin = HCSR04_ECHO; //返回电平引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(HCSR04_PORT, &GPIO_