STM32F103RCT6之超声波测距(HC-SR04)测试篇

STM32F103RCT6之超声波测距(HC-SR04)测试

涉及到的东西: 单片机stm32f103rct6、 hc-sr04超声波测距模块、串口输出设备
在这里插入图片描述

之前买的测距,今天终于弄好了,首先是介绍HC-SR04

在这里插入图片描述
引脚连线:

引脚连接
VCC5V
GND负极
Echo接收端(PA0)
Trig触发端(PA1)

Trig触发端,是为了触发超声波测距工作的引脚
Echo接收信号端:超声波返回到单片机一个高电平,而我们就是通过高电平持续的时间计算距离。

原理:
(1)采用 IO 触发测距,给至少 10us 的高电平信号;
(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
(3)有信号返回,通过 IO 输出一高电平,高电平持续的时间就是
(4)超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2;

在这里插入图片描述
以上是超声波的手册,可以在网上自行查找 我这里主要是讲我写代码的测试的过程。
公式很重要测试距离=(高电平时间*声速(340M/S))/2;

开始正题

1.首先我们应该触发块:

Trig设置高电平时间至少 10us
下面展示一些 内联代码片

// PA1是触发端
void hcsr04_init()
{	
	GPIOA->ODR |= GPIO_ODR_ODR1;
	 delay_us(20);//延时20us
	GPIOA->ODR &=~ GPIO_ODR_ODR1;
}
2.然后我们进行下一步------接收信号判断延时

此过程我遇到很多问题,用了很多办法,输入捕获还不熟,最后使用的是外部触发中断完成的判断高电平时间。

以下重点!!!仔细阅读

思路: 当引脚PA0接收到信号后,就进入中断函数,然后判断,如果是高电平定时器计时,低电平暂停计时并且跟新计时器的CNT。这样只要是进入高点平,就会开启计时器计时,高电平结束进入低电平,停止计时,讲CNT内容获取,最终通过公式计算出距离。

下面展示 中断函数

// TIM2计时,中断是Echo PA0
int a = 0;
	if(GPIOA->IDR& GPIO_IDR_IDR0)
	{
		TIM2->CR1 |=  TIM_CR1_CEN;//开始计时
	}
	else	
	{	
		TIM2->CR1 &=~  TIM_CR1_CEN; //停止
		TIM2->EGR = TIM_EGR_UG;

		b=  TIM2->CNT;//赋值
		b=b*170/10000;//公式
		printf("%dcm   ",b);
		for(int i = 0; i < 3000000; i++);
	}
		EXTI->PR = EXTI_PR_PR0;

注:我在公式中用时间us计算的,因为我再TIM2配置的时间是us计算,公式340m/s。所以需要换算单位。

最后成功:(我的有小许误差,后续修改,此为测试阶段)

在这里插入图片描述
(代码工程后续上传,如果您觉得有用就点个‘赞’吧!!!)

2020.3.30:工程地址

关注微信公众号获取工程“MeiXiangDao2020” 回复:超声波测距

  • 24
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sf9090

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值