logo资料库

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

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
STM32F103RCT6之超声波测距( 之超声波测距(HC-SR04)测试篇 )测试篇 STM32F103RCT6之超声波测距( 之超声波测距(HC-SR04)测试)测试 涉及到的东西: 单片机stm32f103rct6、 hc-sr04超声波测距模块、串口输出设备 之前买的测距,今天终于弄好了,首先是介绍HC-SR04 之前买的测距,今天终于弄好了,首先是介绍
引脚连线: 连接连接 引脚引脚 VCC 5V GND 负极 Echo 接收端(PA0) Trig 触发端(PA1) Trig触发端,是为了触发超声波测距工作的引脚 触发端,是为了触发超声波测距工作的引脚 Echo接收信号端:超声波返回到单片机一个高电平,而我们就是通过高电平持续的时间计算距离。 接收信号端:超声波返回到单片机一个高电平,而我们就是通过高电平持续的时间计算距离。 原理: (1)采用 IO 触发测距,给至少 10us 的高电平信号; (2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回; (3)有信号返回,通过 IO 输出一高电平,高电平持续的时间就是 (4)超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2;
以上是超声波的手册,可以在网上自行查找 我这里主要是讲我写代码的测试的过程。 以上是超声波的手册,可以在网上自行查找 公式很重要 公式很重要:测试距离 高电平时间*声速声速(340M/S))/2; 测试距离=(高电平时间 开始正题 开始正题 1.首先我们应该触发块: 首先我们应该触发块: 设置高电平时间至少 10us Trig设置高电平时间至少 下面展示一些 内联代码片。 // 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 PR = EXTI_PR_PR0; 注:我在公式中用时间us计算的,因为我再 注:我在公式中用时间 最后成功:(我的有小许误差,后续修改,此为测试阶段) 最后成功:(我的有小许误差,后续修改,此为测试阶段) 计算的,因为我再TIM2配置的时间是 配置的时间是us计算,公式计算,公式340m/s。所以需要换算单位。 。所以需要换算单位。
(代码工程后续上传,如果您觉得有用就点个‘赞’吧!!!) 作者:sf9090
分享到:
收藏