通过STM32CubeMX快速使用超声波模块

1 超声波测距模块原理

在这里插入图片描述
超声波测距模块有4个引脚,VCC接3.3~5v电源,Trig是触发信号引脚,Echo是接收信号引脚

普通的超声波测距模块工作原理都一样,工作时序图如下:
在这里插入图片描述
在Trig引脚输入至少10us的高电平就能触发超声波测距模块,在Echi引脚会返回一段持续的高电平,该高电平持续时间就是超声波从发射到返回的传播时间,因此:测量距离=高电平时间*声速(340m/s)/2
使用该模块的难点即如何测量高电平的时间,测量高电平时间有两种方法:
1、采用定时器输入捕获功能
2、采用一普通定时器进行计时
方法一较为复杂,因此本文采用方法二

2 配置程序

在这里插入图片描述
本文采用硬石电机控制板(STM32F407igt6)作演示,任何32板子都一样,只需要使用两个引脚和一个定时器
在这里插入图片描述
首先选择芯片

在这里插入图片描述
选择一调试方法

在这里插入图片描述
修改时钟,采用外部晶振

在这里插入图片描述
选用基础定时器6,基础定时器最高时钟频率为84Mhz,因此将分频系数设置为84-1,计数器周期设置为10-1

在这里插入图片描述
打开定时器6全局中断

在这里插入图片描述
在上图右下角处搜索需要使用的引脚,所搜索的引脚会变黑,如2处所示,点击2处将该引脚设置为GPIO_OUTPUT,再在红色框处设置该引脚为下拉输出,并将名称改为Trig

在这里插入图片描述
同理,将PB3设置为下拉输入模式

在这里插入图片描述
时钟设置时,直接在输入最大时钟频率168Mhz按回车,其他时钟自动配置
最后打开生成代码,在图示界面加入以下代码:
在这里插入图片描述
在这里插入图片描述
其中distance得到的数据即为测量的距离,可以通过串口打印出来,使用CubeMX时,用户程序要写在USER_CODE_BEGIN和USER_CODE_END之间,这样可以避免重新生成代码时覆盖已有内容

uint16_t time_out=0;
uint16_t time_count=0;
uint16_t time_count_end=0;
float distance=0;
void ultra(void)
{
	HAL_TIM_Base_Start_IT(&htim6);  
/*------------------------触发---------------------------*/
	HAL_GPIO_WritePin(Trig_GPIO_Port, Trig_Pin, GPIO_PIN_SET);
	HAL_Delay(20);
	HAL_GPIO_WritePin(Trig_GPIO_Port, Trig_Pin, GPIO_PIN_RESET);
/*-----------------------接收----------------------------*/
	/*等待电平变高进行计时,设置超时时间避免陷入死循环*/
	while(HAL_GPIO_ReadPin(Echo_GPIO_Port, Echo_Pin)==0)
	{
		time_out++;
		if(time_out>=30000) break;
	}
	time_count=0;
	/*电平变低停止计时,同样设置超时时间*/
	/*最大超时时间根据超声波最大测量距离设置*/
	while(HAL_GPIO_ReadPin(Echo_GPIO_Port, Echo_Pin)==1)
	{
		if(time_count>=2355) break;
	}
	time_count_end=time_count;
	/*计算测量距离*/
	distance=time_count_end*10*340/2;
	distance=distance/1000;
	/*关闭定时器,避免持续占用资源*/
	HAL_TIM_Base_Stop_IT(&htim6);  
}

//定时器回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
	if(htim==(&htim6)){
		time_count++;
	}
}

超声波模块有时候测量的数据为一常数,这个时候需要重新上电,这样测量值就恢复正常了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sense_long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值