找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STM32+HC-SR04源程序

[复制链接]
ID:421049 发表于 2019-7-27 01:08 | 显示全部楼层 |阅读模式
利用定时器3产生pwm波,使能超声波模块。利用定时器4计时,计算出时间。

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "oled.h"
  6. #include "SR04.h"
  7. #include "usart.h"          

  8. /************************************************
  9. 时间:2019.7.25
  10. 作者:菜鸡
  11.       利用定时器TIM3的PWM输出得到触发信号
  12.           TIM4用于计算回响电平输出时间
  13. ************************************************/
  14.        
  15. void Count(void);
  16. uint32_t Distance;
  17. uint16_t Time;
  18. uint8_t ShowData[5]={0,0,0,0,0};

  19. int main(void)
  20. {       
  21.         delay_init();                     //延时函数初始化          
  22.         LED_Init();                             //LED端口初始化
  23.         OLED_Init();                        //初始化OLED      
  24.     Uitr_GPIO_Config();
  25.          OLED_ShowString(0,0,"now:",24);
  26.         OLED_ShowString(50,0,"unknow",24);
  27.     OLED_ShowString(0,24,"distance:",16);
  28.          OLED_ShowString(53,40,"mm",24);
  29.         OLED_Refresh_Gram();                //更新显示到OLED
  30.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  31.         TIM3_PWM_Init(999,7199);         //不分频。PWM频率=72000000/900=80Khz
  32.         TIM4_Config();
  33.         while(1)
  34.         {       
  35.         TIM_SetCompare2(TIM3,1);               
  36.                 while(ECHO_IN != 1);
  37.                 TIM_Cmd(TIM4,ENABLE);                                                  //计数器开始计数
  38.                 while(ECHO_IN == 1);
  39.                 TIM_Cmd(TIM4,DISABLE);                                                  //计数器停止计数
  40.                 Count();
  41.         }          
  42.        
  43. }

  44. void Count(void)
  45. {
  46.         Time = TIM4->CNT;                                                                  //读计数器值
  47.         TIM4->CNT = 0;                                                                          //清除计数器
  48.         if(Time>23530)                                                                          //判断是否在4M范围,超出显示ERRO
  49.         {
  50.                 OLED_ShowString(50,0,"failed",24);
  51.                 OLED_Refresh_Gram();                //更新显示到OLED
  52.         }
  53.         else
  54.         {
  55.                 Distance = (uint32_t)(Time*340/2/1000) ;          //计算出来的是MM               
  56.                 ShowData[0]        = (Distance%10000/1000)+'0';
  57.                 ShowData[1]        = (Distance%1000/100)+'0';
  58.                 ShowData[2]        = (Distance%100/10)+'0';
  59.                 ShowData[3]        = (Distance%10/1)+'0';
  60.                 OLED_ShowString(50,0,"normal",24);
  61.                 OLED_ShowString(0,40,ShowData,24);  
  62.                 OLED_Refresh_Gram();                //更新显示到OLED
  63.         }
  64.        
  65. }


复制代码

所有资料51hei提供下载:
HC-SR04超声波测距.7z (197.2 KB, 下载次数: 60)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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