完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32F103RCT6之超声波测距(HC-SR04)测试
涉及到的东西: 单片机stm32f103rct6、 hc-sr04超声波测距模块、串口输出设备 之前买的测距,今天终于弄好了,首先是介绍HC-SR04 引脚连线: 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。所以需要换算单位。 最后成功:(我的有小许误差,后续修改,此为测试阶段) (代码工程后续上传,如果您觉得有用就点个‘赞’吧!!!) |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1614 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1541 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
682 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1592 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 00:10 , Processed in 0.902751 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号