找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1778|回复: 0
收起左侧

基于stm32f4的超声波测距代码

[复制链接]
ID:980503 发表于 2022-3-31 20:50 | 显示全部楼层 |阅读模式
通过使用定时器的计数来实现HCSR04超声波模块测距的功能。

单片机源程序如下:
  1. #include "timer.h"
  2. #include "hc.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "delay.h"
  6. #include "stdio.h"
  7. //PA9为模块trig引脚接口
  8. //PA10为Echo引脚接口

  9. int main(void)
  10. {
  11.         static u8 time;//单程运行时间,单位s
  12.         static u8 length;//路程,单位m
  13.         uart_init(115200);        //串口初始化波特率为115200
  14.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  15.         delay_init(168);  //初始化延时函数
  16.         while(1)
  17.         {
  18.   TIM3_Int_Init(100-1,16800-1);   //初始化TIM3定时器,计数周期为0.02s
  19.   
  20.                 if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
  21.                 {
  22.         while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==1);//echo为高电平时,则等待至低电平,才启动超声波
  23.         GPIO_SetBits(GPIOA,GPIO_Pin_9);    //TRIG置高
  24.         delay_us(20);
  25.         TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
  26.                 }
  27.                
  28.                 while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10) == 0)//等待echo的高电平到来        
  29.            TIM_SetCounter(TIM2,0); //清零计数器
  30.                
  31.                 TIM_Cmd(TIM3, ENABLE);  //使能定时器3,开始计数
  32.                
  33.                 while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10) == 1);//等待echo的高电平结束
  34.                 TIM_Cmd(TIM3, DISABLE);        //失能定时器3,截止计数
  35.                
  36.                 TIM_GetCounter(TIM2);//得到计数器的值
  37.                 time=TIM_GetCounter(TIM2)/20000;//单程时间
  38.                 length=time*344;//计算出长度
  39.                
  40.                 printf("\r\n当前距离为:\r\n");
  41.         }
  42. }
复制代码

Keil代码下载:
代码.7z (314.21 KB, 下载次数: 29)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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