HAL超声波测距

 

 1 extern TIM_HandleTypeDef htim7;
 2 /*
 3 ³¬Éù²¨²â¾à
 4    Trig ¿ØÖÆ PA2 out
 5      Echo ½ÓÊÕ PA3 in   Echo Ϊ¸ßµçƽʱ£¬Æô¶¯¶¨Ê±Æ÷   Echo ΪµÍµçƽ£¬¹Ø±Õ¶¨Ê±Æ÷
 6 */
 7   double  get_distance(){
 8     //¶¨Ê±Æ÷¹é0 È·±£´Ó0¿ªÊ¼¼ÆÊý
 9     __HAL_TIM_SET_COUNTER(&htim7,0);
10 
11     __HAL_TIM_SET_AUTORELOAD(&htim7,50000-1);
12         
13     Led_off_all();
14     //³¬Éù²¨´¥·¢ÐźÅ
15     HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,1);
16     HAL_Delay(100);//Trig¸ßµçƽʱ¼ä´óÓÚ10΢Ãë
17     HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,0);//
18     
19     while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_3)==0);//Åжϳ¬Éù²¨ÊÇ·ñ
20         //·¢³öÉù²¨£¬Æô¶¯¶¨Ê±Æ÷
21         HAL_TIM_Base_Start_IT(&htim7);
22      
23     while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_3)==1);//Åжϳ¬Éù²¨ÊÇ·ñ
24         //½ÓÊÕÉù²¨£¬¹Ø±Õ¶¨Ê±Æ÷
25         HAL_TIM_Base_Stop(&htim7);
26      
27     //¼ÆËã³ö³¬Éù²¨µÄ´«Êäʱ¼ä£¬ÒÔ¼°²âµÃµÄ¾àÀë
28     
29         double  times;   //³¬Éù²¨µÄ´«ÊäµÄʱ¼ä
30         double distance;//³¬Éù²¨²âµÃµÄ¾àÀë
31       double count;   //¶¨Ê±Æ÷¼ÆÊýµÄʱ¼ä
32         count  = __HAL_TIM_GET_COUNTER(&htim7);//¼ÆÊýµÄ´ÎÊý
33         printf("\n计数器计数的次数:%lf\n",count);
34         
35         times = count*100;//¼ÆÊýµÄʱ¼ä = ¼ÆÊýµÄ´ÎÊý * ÿ¼Ó1µÄʱ¼ä
36         
37         distance = times * 340 / 1000000.0 * 100 / 2.0;
38         
39     return distance;
40 }

void main(){
  printf("距离:%.2lf",get_distance());
}

运行的结果

 

转载于:https://www.cnblogs.com/zoute/p/9486691.html

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值