基于HAL库的定时器输入捕获进行超声波测距

基于HAL库的定时器输入捕获进行超声波测距

HC-SR04原理

在这里插入图片描述

1、采用TRIG引脚触发测距,给至少10us的高电平信号来启动模块。
2、模块自动发送8个40khz的方波,自动检测是否有信号返回。
3、发送方波后,ECHO引脚电平由低变高,保持不变。如果有信号返回,再通过ECHO引脚输出低电平,测量结束。
4、高电平持续的时间就是超声波从发射到返回的时间。通过公式计算测试距离=高电平时间*声速

————————————————
在这里插入图片描述

  • 主要参数说明
    1 :使用电压:DC—5V
    2: 静态电流:小于2mA
    3: 电平输出:高5V
    4: 电平输出:低0V
    5: 感应角度:不大于15度
    6: 探测距离:2cm-450cm
    7: 高精度 可达0.2cm

CubeMX的配置

一、首先配置RCC
在这里插入图片描述
二、配置超声波的TRIG端口

这里以PA1引脚为例
在这里插入图片描述
三、配置超声波的ECHO端口

这里以TIM2 CH3为例
在这里插入图片描述
注意要打开定时器的中断
在这里插入图片描述
四、时钟配置
因为我用的是STM32F103C8T6, 最高72M主频
在这里插入图片描述
五、最后的工程配置
在这里插入图片描述
按照自己的要求更改就行

代码添加

while循环中

	while (1)   
	{
	  HAL_Delay(50); //在循环中每50ms启动一次检测
	   
	  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1,GPIO_PIN_SET);//PA1置高电平
	  HAL_Delay(1)//大于10us即可,这里延时1ms
	  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1,GPIO_PIN_RESET)//PA1置低电平
	  HAL_TIM_IC_CaptureCallback(&htim2); //进入中断服务函数
  	 
      printf("距离为 :%.1fCM\r\n",17.6*high_time/1000); //串口打印距离
	}

HAL_TIM_IC_CaptureCallbac中断服务函数中

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
  static uint32_t capture_buf[2]={0,0};  //计数器缓存
  static uint8_t capture_cnt=0;          //循环次数
  
  if(capture_cnt==0)//判断是不是重新测距
  {
    capture_cnt++;
    __HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_2,TIM_INPUTCHANNELPOLARITY_RISING);  //开启上升沿捕获
    HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);  //开启捕获
  }
	
  if(capture_cnt==3)//测距完成,末减初得到高电平时间
  { 
    high_time = capture_buf[1]- capture_buf[0];//高电平时间=计数差值
    capture_cnt=0;
  }
  if(TIM2== htim->Instance)
  {
	if(HAL_TIM_ACTIVE_CHANNEL_2 == htim->Channel)
	{
	  switch(capture_cnt)
	  {
		 case 1:
				capture_buf[0]= __HAL_TIM_GET_COMPARE(htim,TIM_CHANNEL_2);//捕获到上升沿,开始第一次计数
		        __HAL_TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_2,TIM_INPUTCHANNELPOLARITY_FALLING); //开启捕获下降沿
			    capture_cnt++;
			    break;
		 case 2:
				capture_buf[1]= __HAL_TIM_GET_COMPARE(htim,TIM_CHANNEL_2); //捕获到下降沿,开始第二次计数
			    capture_cnt++;
			    HAL_TIM_IC_Stop_IT(htim,TIM_CHANNEL_2); //停止捕获 
			    break;				 
		default: break;
		}		
	 }	
  }	
}

总结

总结就是好好学习
附上我的源码文件链接:HAL库输入捕获进行超声波测距.zip

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值