制作一个动态企业网站,app制作平台灼灼琉璃夏漫画,江苏建设厅官网网站,深圳十大网络推广公司排名1、模块介绍
型号#xff1a;HC-SR04 超声波测距模块是用来测量距离的一种产品#xff0c;通过发送和收超声波#xff0c;利用时间差和声音传播速度#xff0c; 计算出模块到前方障碍物的距离。 2、超声波模块的使用方法
怎么让它发送波 Trig #xff0c;给Trig端口至…1、模块介绍
型号HC-SR04 超声波测距模块是用来测量距离的一种产品通过发送和收超声波利用时间差和声音传播速度 计算出模块到前方障碍物的距离。 2、超声波模块的使用方法
怎么让它发送波 Trig 给Trig端口至少10us的高电平
怎么知道它开始发了 Echo信号由低电平跳转到高电平表示开始发送波
怎么知道接收了返回波 Echo由高电平跳转回低电平表示波回来了
怎么算时间 Echo引脚维持高电平的时间 波发出去的那一下开始启动定时器 波回来的拿一下我们开始停止定时器计算出中间经过多少时间
怎么算距离 距离 速度 340m/s* 时间/2
3、 超声波时序图 4、编程实现
需求使用超声波测距当手离传感器距离小于5cm时LED1点亮否则保持不亮状态。
codeMX配置 定时器配置使用 TIM2 只用作计数功能不用作定时。 将 PSC 配置为71则计数 1 次代表 1us 。
这里因为涉及到us级的延时而我们的HAL_Delay()延迟函数时ms级别的所以在这里用不了。需要我们使用定时器编写一个us级的延时函数
使用到的HAL库函数
1.启用TIM外设启动定时器计数 __HAL_TIM_ENABLE(__HANDLE__) 参数定时器的句柄 2.在运行时设置TIM计数器寄存器值设置计数器的值 #define __HAL_TIM_SetCounter __HAL_TIM_SET_COUNTER #define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__) 参数1定时器的句柄 参数2指定计数器寄存器的新值 3.在运行时获取TIM计数器寄存器值 #define __HAL_TIM_GetCounter __HAL_TIM_GET_COUNTER #define __HAL_TIM_GET_COUNTER(__HANDLE__) 参数定时器的句柄 返回值计时器计数器寄存器的值 (TIMx_CNT) 4.禁用TIM外设关闭定时器计数 #define __HAL_TIM_DISABLE(__HANDLE__) 参数定时器的句柄 5.启动TIM Base生成启动定时器 HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) 参数定时器的句柄 6.停止生成TIM Base。停止定时器 HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim) 参数定时器的句柄 __HAL_TIM_ENABLE(htim2)与 HAL_TIM_Base_Start(htim2)两个库函数有什么区别
代码实现
延时函数代码
//使用TIM2来做us级延时函数
void TIM2_Delay_us(uint16_t n_us)
{/* 使能定时器2计数 */__HAL_TIM_ENABLE(htim2);__HAL_TIM_SetCounter(htim2, 0);while(__HAL_TIM_GetCounter(htim2) ((1 * n_us)-1) );/* 关闭定时器2计数 */__HAL_TIM_DISABLE(htim2);
}
main函数里面的代码 while (1){//1. Trig 给Trig端口至少10us的高电平HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_SET);TIM2_Delay_us(20);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_RESET);//2. echo由低电平跳转到高电平表示开始发送波while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5) GPIO_PIN_RESET);//波发出去的那一下开始启动定时器HAL_TIM_Base_Start(htim2);__HAL_TIM_SetCounter(htim2,0);//测量之前先把次数置零//3. 由高电平跳转回低电平表示波回来了while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5) GPIO_PIN_SET);//波回来的那一下我们开始停止定时器HAL_TIM_Base_Stop(htim2);//4. 计算出中间经过多少时间count __HAL_TIM_GetCounter(htim2);//获取次数dis (0.017 * count) / 2;//5. 距离 速度 340m/s* 时间/2计数1次表示1usif(dis 10){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);HAL_Delay(1000);}else{HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);}//每500毫秒测试一次距离HAL_Delay(500);}