首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

超声波测距模块HC-SR04(基于STM32F103C8T6HAL库)

  • 25-03-06 17:01
  • 3378
  • 11089
blog.csdn.net

超声波测距模块参考资料

1.电路连接及引脚配置

触发信号PA3只需要输出10us的高电平,所以直接设置成 普通的GPIO端口即可;回响信号使用外部中断,上升沿信号产生外部中断,打开定时器,下降沿再产生一次中断,读取定时器的值,就是高电平的时间,测试距离=(高电平时间*声速(340M/S))/2。

调试引脚配置:

配置时钟:

GPIO配置: 

打开中断: 

 定时器设置:配置成最基本的定时器即可

\frac{HCLK}{PCS+1}=\frac{72MHz}{71+1}=1MHz

PSC设置为72时候就是没过1us定时器里面的计数值就加1,我们的计数器是16位的,就是最大可以计数到65535,那我这个定时器最大可以计时到65535us,即0.065535s。所以最大测距范围为:\frac{0.065535\times340}{2}=11.14095m,远远大于这款超声波测距模块的测距范围。

除此之外,我们要设置一下I2C给OLED显示屏使用,用于显示测量值:

2.驱动文件编写

(1)添加两个文件sr04.c和sr04.h

(2)sr04. h

  1. #ifndef _SR04_H
  2. #define _SR04_H
  3. #include "stm32f1xx_hal.h"
  4. void GET_Distance(void);
  5. #endif

(3)sr04.c,超声波测距实现

  1. #include "sr04.h"
  2. uint16_t count;
  3. float distance;
  4. extern TIM_HandleTypeDef htim3;
  5. /*指令耗时计算延时函数:
  6. 在程序里执行若干条空指令,来达到延时效果*/
  7. void RCCdelay_us(uint32_t udelay)
  8. {
  9. __IO uint32_t Delay = udelay * 72 / 8;//(SystemCoreClock / 8U / 1000000U)
  10. //见stm32f1xx_hal_rcc.c -- static void RCC_Delay(uint32_t mdelay)
  11. do
  12. {
  13. __NOP();
  14. }
  15. while (Delay --);
  16. }
  17. /*测距模块触发信号函数*/
  18. void GET_Distance(void)
  19. {
  20. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);
  21. RCCdelay_us(12);
  22. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET); //触发引脚电平拉高12us输出触发信号
  23. }
  24. /*中断服务函数,计数定时,解算测量距离*/
  25. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  26. {
  27. if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_2)==GPIO_PIN_SET) //上升沿中断
  28. {
  29. __HAL_TIM_SetCounter(&htim3,0); //定时器清零
  30. HAL_TIM_Base_Start(&htim3); //定时器开始计时
  31. }
  32. else //下降沿触发中断
  33. {
  34. HAL_TIM_Base_Stop(&htim3); //定时器停止计时
  35. count=__HAL_TIM_GetCounter(&htim3); //读取定时器计数值
  36. distance=count*0.017; //测试距离:((count/1000000)*340/2)*100,单位CM
  37. }
  38. }

(4)main.c

主函数里直接在直接调用GET_Distance()即可。

注:本文转载自blog.csdn.net的xuhc_zd的文章"https://blog.csdn.net/xuhc_zd/article/details/141674479"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top