STM32——超声波测距模块(HAL库CubeMx)
超声波测距
- 1. 超声波测距模块原理
- 2. CubeMx配置
- 3. 代码的编写
- 3.1 定时器计时的计算
- 3.2 接口函数
1. 超声波测距模块原理
(2021/11/28 16:25编辑)
超声波测距模块有Trig引脚和Echo引脚来进行测距,当Trig引脚拉高大于11us之后触发超声波测距模块,Echo引脚变高,随后发出超声波,经过反弹回来接受到回来的超声波之后Echo引脚会变低
距离=Echo引脚从高变低的时间∗声速距离=Echo引脚从高变低的时间*声速 距离=Echo引脚从高变低的时间∗声速
(2021/11/28 16:35编辑结束)
2. CubeMx配置
3. 代码的编写
(2021/11/28编辑)
3.1 定时器计时的计算
- 定时器计时的时间=计数值(CNT)分频数(PSC)/晶振频率(72M)+周期数周期(单位:S)
- 比如:我如下代码我返回的时间是us,晶振是72MHZ,PSC是7200-1,CNT是10000-1,所以我一个周期就是(PSC+1)(CNT+1)/72M=1S,计数一次的时间是:(PSC+1)/72M=1/10000说明一秒中振荡10000次,所以计数一次是(1/10000)S,所以换算成us的时候要计数值100
- 具体可以看我的文章:STM32——定时器TIM(重中之重)
/*
** 函数功能:获取定时器计时的时间
** 参 数:定时器句柄htimx
** 返 回 值:定时器计算的时间(单位:us)
** 作 者: LJF
*/
uint32_t Get_TIM_Time(TIM_HandleTypeDef* htimx)
{uint32_t time;/*时间=当前定时器计数值*计数一次所需要的时间+周期数*周期*/time=htimx->Instance->CNT*100+Time_Sound_Interrupt*TIM_T;Time_Sound_Interrupt=0;//周期计数变量手动置0htimx->Instance->CNT=0;//定时器计数寄存器置0return time;
}
参考文章:
STM32定时器的预装载值和预分频系数如何确立
STM32的定时器定时时间计算(计数时间和中断定时时间)
(2021/11/28 1:24编辑结束)
3.2 接口函数
/*
** 函数功能:超声波测距
** 参 数:定时器句柄*htimx、
** 返 回 值:测试出来的最终距离(单位:cm)
** 作 者: LJF
** 说 明:
*/
float HCSR04_GetDistant(TIM_HandleTypeDef* htimx,GPIO_TypeDef *Trig_GPIO_Port, uint16_t Trig_Pin,GPIO_TypeDef *Echo_GPIO_Port, uint16_t Echo_Pin)
{uint32_t times=0;HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_SET);//拉高Trigdelay_us(11); //将Trig拉高至少10usHAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_RESET);//拉低Trigwhile (HAL_GPIO_ReadPin(Echo_GPIO_Port,Echo_Pin)==GPIO_PIN_RESET);//等待高电平 HAL_TIM_Base_Start(htimx); //开启TIMx开始计时HAL_TIM_Base_Start_IT(htimx); //使能TIM2中断while (HAL_GPIO_ReadPin(Echo_GPIO_Port,Echo_Pin)==GPIO_PIN_SET);//等待低电平HAL_TIM_Base_Stop(htimx); //关闭TIMx停止计时HAL_TIM_Base_Stop_IT(htimx); //使能TIM2中断times=Get_TIM_Time(htimx); //获取TIMx的时间printf("times=%d\r\n",times);return times*0.017;//0.017=340/2/1000000*100
}
STM32——超声波测距模块(HAL库CubeMx)相关推荐
- stm32直流电机PID控制hal库(Cubemx)
stm32直流电机PID控制hal库(Cubemx),一步步手把手教你怎么配置cubemx怎么写代码. 未对pid就行深入解析,不过相信您通过配置和写代码以后大概可以知道pid的主要作用. 文章目录 ...
- STM32 超声波测距模块HC-SR04 驱动
HC-SR04是常用的测距模块,这里分享关于这个模块的使用方法. 基本原理: Trig口输入一个大于10us的高电平做激励(一般用20us) 随后检测Echo口的电平,产生高电平时开始计时,直至低电平 ...
- STM32单片机基于HAL库开发HC-SR04 超声波测距模块(终极版)
参考: 某宝HC-SR04 超声波测距模块商品详情页 STM32L051C8T6 HAL库 输入捕获进行超声波测距 案例 STM32CubeMX学习笔记3--TIM2输入捕获(SR-04测距) cub ...
- STM32用超声波测距模块实现测距
STM32用超声波测距模块实现测距 通过超声波测距模块可以实现超声波反射型距离测试.市面上的超声波测距模块主要有两种.一种是分体式模块(HC-SR04等),由超生波发射头和接收头组成,一种是一体式模块 ...
- HC-SR04超声波测距模块使用方法和例程(STM32)
基于STM32和HC-SR04模块实现超声波测距功能 最近在学STM32做个简单的应用实践一下,顺便水一篇文章. 本文用的单片机是STM32F103C8T6,超声波测距模块是HC-SR04,显示测距结 ...
- stm32控制超声波测距模块HC-SR04
引脚:PB15 TRIG,PB0 ECHO: 不同距离,LED对应不良.闪烁.亮状态,并通过串口发送到PC; TIM3定时中断,测出脉宽长度,没有像野火一样使用捕捉功能: 1.HS-SR04模块实物图 ...
- stm32蓝牙模块和超声波测距模块
蓝牙 蓝牙概念 蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接. [1] 蓝牙使当前的一些便携移动设备和计算 ...
- 学习并使用HC-SR04超声波测距模块+STM32
** 超声波测距原理 ** 参考博客: https://blog.csdn.net/qq_40734815/article/details/105992801 https://blog.csdn.ne ...
- STM32蓝牙控制循迹避障小车源代码——3.舵机、超声波测距模块
STM32蓝牙控制循迹避障小车源代码--3.舵机.超声波测距模块 注意-所需模块: US-015超声波模块 SG90舵机云台 接线:舵机超声波: A1–P2.7 B8–Trig B9–Echo 代码 ...
最新文章
- QT+VS打包发布流程该怎么做?
- 阿里达摩院青橙奖颁出:10名85后每人100万!其中有硬核粉红少女,还有人被LeCun点名支持...
- 计算机组成原理课设移位,计算机组成原理课设(多寄存器减法、右移位、输入输出、转移指令实验计算机设计)...
- DBA(二):percona软件、innobackupex备份与恢复
- 手机应用在线打包url
- zabbix邮件告警
- java 内部thread_Java代码质量改进之:使用ThreadLocal维护线程内部变量
- .net redis定时_一场由fork引发的超时,让我们重新探讨Redis的抖动问题
- Sage CRM升级注意事项二
- Python的单链表实现
- Power Query获取整理多来源数据
- Net设计模式实例之组合模式(Composite Pattern)(3)
- Android View之布局加载流程
- VGA、HDMI、DVI 和 DP接口
- 图吧主机linux,图吧垃圾佬的LINUX体验
- Linux ubuntu14.04 下 chromium 浏览器 CPU占用资源优化
- python写生日祝福语大全_【Python 1-6】Python教程之——数字
- buildroot 执行 make savedefconfig 错误解决
- QT - 小型翻车现场
- OA项目总结(附程序源码)