基于stm32+HC-SR04模块实现超声波测距功能

HC_SR04这款超声波测距模块的使用说明在网上都能找到,使用方法也很简单。所以我这里就直接上代码了,希望能够对大家有所帮助。

 main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "HCSR04.h"

#define Echo GPIO_Pin_8
#define Trig GPIO_Pin_9

uint32_t Count,Distance;

int main(void)
{
	HCSR_Init();
	OLED_Init();
	OLED_ShowChar(1,1,'A');
	GPIO_ResetBits(GPIOA,Trig);
	while(1)
	{
		GPIO_SetBits(GPIOA,Trig);
		Delay_us(12);
		GPIO_ResetBits(GPIOA,Trig);
		
		while(!GPIO_ReadInputDataBit(GPIOA,Echo));
		TIM_Cmd(TIM2,ENABLE);			//开启时钟
		while(GPIO_ReadInputDataBit(GPIOA,Echo));
		TIM_Cmd(TIM2,DISABLE);			//关闭时钟
		Count=TIM2->CNT;				//将定时器2的计数值赋给Count
		TIM_SetCounter(TIM2,0);			//清空定时器计数
		
//		OLED_ShowNum(2,5,Count,5);
		Distance=Count*17/100;			//计算实际距离(此处声速取340m/s)
		OLED_ShowNum(3,5,Distance,5);
		OLED_ShowString(3,10,"mm");		//显示测距结果:mm
		Delay_ms(1000);

	}
}

HCSR04 .c

#include "stm32f10x.h"                  // Device header

void HCSR_Init(void)
{
	//配置GPIO
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	//配置时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period=30000-1;		//ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler=72-1;		//PSC
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
}

HCSR04.h

#ifndef __HCSR04_
#define __HCSR04_

void HCSR_Init(void);

#endif

程序中用的OLED驱动是江科大写的,工程文件打包放在下面,有需要的可以自行下载使用

链接:https://pan.baidu.com/s/1A46kaC64pPYGjSCmniWpYg 
提取码:cgst

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值