下面是关于stm32驱动超声波模块的一段代码,有需要的朋友可以复制参考,希望对大家能够有所帮助和启发。

  #define HCSR04_PORT GPIOB

  #define HCSR04_CLK RCC_APB2Periph_GPIOB

  #define HCSR04_TRIG GPIO_Pin_8

  #define HCSR04_ECHO GPIO_Pin_9

  #define TRIG_Send(n) do{

  if(n == 0)

  GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);

  else if(n == 1)

  GPIO_SetBits(HCSR04_PORT,HCSR04_TRIG);

  }while(0)

  #define ECHO_Reci GPIO_ReadInputDataBit(GPIOB,HCSR04_ECHO)

  void UltrasonicInit(void)

  {

  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(HCSR04_CLK, ENABLE);

  //IO初始化

  GPIO_InitStructure.GPIO_Pin = HCSR04_TRIG; //发送电平引脚

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出

  GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);

  GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);

  GPIO_InitStructure.GPIO_Pin = HCSR04_ECHO; //返回电平引脚

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入

  GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);

  GPIO_ResetBits(HCSR04_PORT,HCSR04_ECHO);

  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //生成用于定时器设置的结构体

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); //使能对应RCC时钟

  //配置定时器基础结构体

  TIM_DeInit(TIM6);

  TIM_TimeBaseStructure.TIM_Period = (1000-1); //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到1000为1ms

  TIM_TimeBaseStructure.TIM_Prescaler =(72-1); //设置用来作为TIMx时钟频率除数的预分频值 1M的计数频率 1US计数

  TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//不分频

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

  TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

  TIM_ClearFlag(TIM6, TIM_FLAG_Update); //清除更新中断,免得一打开中断立即产生中断

  TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE); //打开定时器更新中断

  NVIC_InitTypeDef NVIC_InitStructure;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

  NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn; //选择串口1中断

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占式中断优先级设置为1

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应式中断优先级设置为1

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断

  NVIC_Init(&NVIC_InitStructure);

  TIM_Cmd(TIM6,DISABLE);

  }

  //定时器6中断服务程序

  u32 msHcCount = 0;

  void TIM6_IRQHandler(void) //TIM6中断

  {

  if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否

  {

  TIM_ClearITPendingBit(TIM6, TIM_IT_Update); //清除TIMx更新中断标志

  msHcCount++;

  }

  }

  static void OpenTimerForHc() //打开定时器

  {

  TIM_SetCounter(TIM6,0); //清除计数

  msHcCount = 0;

  TIM_Cmd(TIM6, ENABLE); //使能TIMx外设

  }

  static void CloseTimerForHc() //关闭定时器

  {

  TIM_Cmd(TIM6, DISABLE); //使能TIMx外设

  }

  //获取定时器时间

  u32 GetEchoTimer(void)

  {

  u32 t = 0;

  t = msHcCount*1000; //将MS转换成US

  t += TIM_GetCounter(TIM6); //得到总的US

  TIM6->CNT = 0; //将TIM6计数寄存器的计数值清零

  return t;

  }

  //一次获取超声波测距数据 两次测距之间需要相隔一段时间,隔断回响信号

  //为了消除余震的影响,取五次数据的平均值进行加权滤波。

  float Hcsr04GetLength(void )

  {

  u32 t = 0;

  int i = 0;

  float lengthTemp = 0;

  float sum = 0;

  while(i!=5)

  {

  /*发送一个20ms的脉冲*/

  TRIG_Send(1);

  osDelay(20);

  TRIG_Send(0);

  while(ECHO_Reci == 0); //等待接收口高电平输出(超声波发出)

  OpenTimerForHc(); //打开定时器

  while(ECHO_Reci == 1); //等待超声波返回

  CloseTimerForHc(); //关闭定时器

  t = GetEchoTimer(); //获取时间,分辨率为1US

  lengthTemp = ((float)t*17/1000.0);//cm

  sum = lengthTemp + sum ;

  i = i + 1;

  }

  lengthTemp = sum/5.0;

  return lengthTemp;

  }

最后在个大家提供一些stm32方面的参考资料

(stm32直流电机驱动)
http://www.makeru.com.cn/live/1392_1218.html?s=45051

(stm32 温湿度采集)
http://www.makeru.com.cn/live/detail/1476.html?s=45051
( ADC读取光照传感器)
http://www.makeru.com.cn/live/1392_1004.html?s=45051

(stm32串口应用)
http://www.makeru.com.cn/live/1392_1164.html?s=45051

stm32驱动超声波模块的更多相关文章

  1. STM32—驱动GY85-IMU模块

    GY85是一个惯性测量模块,内部集成了三轴加速度计.三轴陀螺仪.电子罗盘.气压传感器等芯片,用于测量和报告设备速度.方向.重力,模块可以将加速度计.陀螺仪.电子罗盘等传感器的数据进行综合,在上位机可以 ...

  2. STM32—驱动RFID-RC522模块

    文章目录 一.S50(M1)卡介绍 1.S50(M1)卡基础知识 2.内部信息 3.存取控制 4.数据块的存取控制 5.控制块的存取控 6.工作原理 7.M1与读卡器的通信 二.RC522工程代码详解 ...

  3. STM32—驱动HC-SR04超声波测距模块

    文章目录 超声波测距原理 HC-SR04工作原理 STM32实现驱动 1.引脚的配置 2.时序控制 3.时间差测量 4.如何将距离测出来 超声波测距原理 利用HC-SR04超声波测距模块可以实现比较精 ...

  4. 关于HC04超声波模块测距的思考(51版)

    之前写过一篇HC04的使用文章,当时是使用stm32来实现的,原文链接. 后来又多次使用51来驱动这个模块,有时候有测距需要,使用了几次,总是感觉我上次那个程序不是很好, 所以这次对它进行了改进.虽然 ...

  5. 超声波手势识别(STM32四路超声波获取)

    超声波手势识别在市场上已经有见实现,但研究其传感器发现并不是市场上随意可见的,如果暂且考虑成本,该如何入门实现简单的手势识别呢.聊天中老师给出一个很好的提议,就是固定四个超声波,分别为上下左右,然后进 ...

  6. [TPYBoard - Micropython之会python就能做硬件 8] 学习使用超声波模块制作避障小车

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604   一.实验器材 1.TPYboard V102板  一块 2.电机驱动模块L2 ...

  7. STM32驱动ILI9341控制器控制TFTLCD显示

    STM32驱动ILI9341控制器控制TFTLCD显示 一.用STM32控制TFTLCD显示的编程方法,在编程驱动TFTLCD液晶显示器之前,我们先熟悉以下概念: 1.色彩深度,这是一个与TFTLCD ...

  8. AMS5601的ardunio和STM32驱动开发

    AMS5601的ardunio和STM32驱动开发 本文有麦粒电子撰写,并提供相应产品服务. 前言 目前ams关于磁编码芯片用的比较多的可能是ams5600,能够输出pwm信号,电压信号以及I2C通信 ...

  9. esp8266的STM32驱动

    esp8266的STM32驱动,数据发送接收由DMA完成,释放CPU. 目前只能发送返回消息为成功或失败的AT命令,并判断是否成功,详见esp8266_cmd():其它返回消息不可预知的命令(如查看A ...

随机推荐

  1. 一行Java代码实现游戏中交换装备

    摘要:JDK 1.5 开始 JUC 包下提供的 Exchanger 类可用于两个线程之间交换信息. 本文分享自华为云社区<一行Java代码实现两玩家交换装备[并发编程]>,作者:陈皮的Ja ...

  2. vue-admin-element 页面跳转

    1.通过router-link 进行跳转 <router-link to="/china-quotation/business-function/quotation-request&q ...

  3. git config 选项

    git config  --global -- global 写入选项:写入全局的 ~/.gitconfig 文件而不是版本库的 .git/config,如果 ~/.gitconfig 文件不存在,则 ...

  4. 集合Collection ----List集合

    Collection集合体系的特点: set系列集合:添加的元素是 无序,不重复,无索引的 ----HashSet: 无序,不重复,无索引 ----LinkedHashSet: 有序,不重复,无索引 ...

  5. css3 横屏

    @media screen and (orientation: portrait) { html{ width : 100vmin; height : 100vmax; } body{ width : ...

  6. python BeautifulSoup html解析

    * BeautifulSoup 的.find(), .findAll() 函数原型 findAll(tag, attributes, recursive, text, limit, keywords) ...

  7. 接口测试checklist

    静态测试 接口文档与设计文档对应 接口定义 接口定义与数据库定义 业务功能测试 系统全流程验证 逆向全流程验证 事务性测试 边界值测试 业务规则边界值 场景分析合理长度 场景分析合理数据量 输入.输出 ...

  8. Web项目自动打开并且全屏

    前言 在项目当中,有些需要开机自动打开并且还要全屏.通过总结,得到以下结论:大致方法一样(IE.火狐.谷歌支持),个别的只是命令不同,以火狐浏览器为例. 浏览器全屏打开指定网页设置方法 新建浏览器快捷 ...

  9. Python 通过 .cube LUT 文件对图像加滤镜

    Python 通过 .cube LUT 文件对图像加滤镜 一个好用的python给图片加滤镜的代码: https://github.com/CKboss/PyApplyLUT 这个是对C++代码的封装 ...

  10. WPF实现Win10汉堡菜单

    WPF开发者QQ群: 340500857  | 微信群 -> 进入公众号主页 加入组织 前言 有小伙伴提出需要实现Win10汉堡菜单效果. 由于在WPF中没有现成的类似UWP的汉堡菜单,所以我们 ...