基于STM32的HCSR04超声波传感器测距

 认识HCSR04超声波传感器

接口定义和模式选择

 Vcc、 Trig(控制端)、 Echo(接收端)、 Gnd 三种控制模式,一般使用第一种GPIO控制,下面我的代码是使用第一种GPIO控制,如果使用其他两种可以自己探索下,我下面页简单介绍下。

GPIO模式

UART串口模式和I2C模式

工作原理

时序图

原理图

编程思路

接线图

我这里使用的是STM32F103C8T6,开发板与传感器接线图

GPIOA0配置为推挽输出,GPIOA8普通输入模式

PA8也是定时器CH1通道

main函数

main函数代码,传感器没有单独封装.c和.h文件直接跟主函数写一起

while (1)
  {
	//1、让计数器CNT归零  
	__HAL_TIM_SET_COUNTER(&htim1,0); 
	  
	//2、清除CC1、CCR标志位
    __HAL_TIM_CLEAR_FLAG(&htim1,TIM_FLAG_CC1);
    __HAL_TIM_CLEAR_FLAG(&htim1,TIM_FLAG_CC2);
	  
	//3、开启定时器
	HAL_TIM_IC_Start(&htim1,TIM_CHANNEL_1);
	HAL_TIM_IC_Start(&htim1,TIM_CHANNEL_2);
	  
	//4、向Trig发送脉冲
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);	
	for(uint32_t i =0;i<10;i++); //延时10us  
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);  
	  
	//5、等待测量结束
	uint8_t success = 0;//标志位测量是否成功,0失败1成功
	uint32_t expireTime = HAL_GetTick() + 50;//最长等待时间	
	//判断是否超时  
	while(expireTime > HAL_GetTick())
	{
		uint32_t cc1Flag = __HAL_TIM_GET_FLAG(&htim1,TIM_FLAG_CC1);//cc1标志位
		uint32_t cc2Flag = __HAL_TIM_GET_FLAG(&htim1,TIM_FLAG_CC2);//cc2标志位
		if(cc1Flag && cc2Flag){ //cc1和cc2标志位都为1
			success = 1;//测量成功
			break;//结束循环
		}
	}	

    //6、关闭定时器	
	HAL_TIM_IC_Stop(&htim1,TIM_CHANNEL_1);
	HAL_TIM_IC_Stop(&htim1,TIM_CHANNEL_2);	
	
	//7、计算距离
	if(success == 1) //测量成功
	{
		//读取ccr1的值
		uint16_t ccr1 = __HAL_TIM_GET_COMPARE(&htim1,TIM_CHANNEL_1);
		//读取ccr2的值
		uint16_t ccr2 = __HAL_TIM_GET_COMPARE(&htim1,TIM_CHANNEL_2);
		//计算脉宽
		float pulseWidth = (ccr2 - ccr1) * 1e-6f;
		//距离
		float distance = 340.0f * pulseWidth / 2.0f;
		
		if(distance <0.2)
		{
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
		}
		else
		{
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
		}		
		
	}	
  }

效果演示

效果演示,除了这个板载LED亮我还加了蜂鸣器

HCSR04超声波测距传感器

本人也是在学习32中,刚入门水平,如本文如有错误请指正。看到这了,动动发财的小手点个赞鼓励支持下,你的点赞是我的持续更新的动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值