找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5832|回复: 2
收起左侧

HC-HR04超声波测距模块的stm32驱动源码

[复制链接]
ID:327448 发表于 2018-9-13 17:30 | 显示全部楼层 |阅读模式
串口加屏幕显示超声测距数据,使用HC-HR04,超声波测距是超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。代码中已经计算,探测距离3mm到2m,代码如下:

stm32单片机源程序如下:
  1. /*连接方式
  2.         Trig ---- GPIO_Pin_1

  3.         Echo ---- GPIO_Pin_0

  4.         VCC ---- 5.0V
  5.         GND ---- GND
  6. */

  7. #include "led.h"
  8. #include "delay.h"
  9. #include "sys.h"
  10. #include "timer.h"
  11. #include "usart.h"



  12. extern u8  TIM2CH1_CAPTURE_STA;                //输入捕获状态                                                   
  13. extern u16        TIM2CH1_CAPTURE_VAL;        //输入捕获值

  14. float distance;
  15. int main(void)
  16. {       
  17.          
  18.         u32 temp=0;
  19.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
  20.         delay_init();                     //延时函数初始化       
  21.         uart_init(9600);                                 //9600         
  22.         LED_Init();                          //初始化与LED连接的硬件接口
  23.         TIM1_PWM_Init(899,0);                         //不分频。PWM频率=72000/(899+1)=80Khz
  24.         TIM2_Cap_Init(0XFFFF,72-1);                //以1Mhz的频率计数
  25.            while(1)
  26.         {
  27.         delay_ms(10);
  28.                 Wave_SRD_Strat();
  29. //                TIM_SetCompare1(TIM1,TIM_GetCapture1(TIM1)+1);
  30. //                if(TIM_GetCapture1(TIM1)==300)TIM_SetCompare1(TIM1,0);                 
  31.                 if(TIM2CH1_CAPTURE_STA&0X80)//成功捕获到了一次高电平
  32.                 {
  33.                         temp=TIM2CH1_CAPTURE_STA&0X3F;
  34.                         temp*=65536;                                        //溢出时间总和
  35.                         temp+=TIM2CH1_CAPTURE_VAL;                //得到总的高电平时间
  36.                         distance = temp/59.0;
  37.                         printf("HIGH:%.2f cm\r\n",distance);        //打印总的高点平时间
  38.                         LED1=!LED1;
  39.                         TIM2CH1_CAPTURE_STA=0;                        //开启下一次捕获
  40.                 }
  41.         }
  42. }
复制代码

所有资料51hei提供下载:
超声波5.0.rar (299.59 KB, 下载次数: 103)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:688443 发表于 2020-1-28 17:03 | 显示全部楼层
请问distance为什么是temp/59
回复

使用道具 举报

ID:562738 发表于 2021-2-22 12:37 | 显示全部楼层
兄弟你这个错误一大堆哎
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表