STM32视频教程

超声波模块

作者:陈广
日期:2021-12-5


视频播放地址

点击播放

超声波模块购买地址

3.6元钱的超声波模块购买地址

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.62de2e8de2lzxI&id=566913718044&_u=5htvhlo0151

4.2元钱的超声波模块购买地址

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.62de2e8de2lzxI&id=596604876229&_u=5htvhlo1efe

超声波数据手册下载地址

http://iotxfd.cn/down/STM32/US-025.pdf

代码

tim.c 文件:

#include "tim.h"

/* TIM6 init function */
void MX_TIM6_Init(void)
{

  /* USER CODE BEGIN TIM6_Init 0 */

  /* USER CODE END TIM6_Init 0 */

  LL_TIM_InitTypeDef TIM_InitStruct = {0};

  /* Peripheral clock enable */
  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM6);

  /* USER CODE BEGIN TIM6_Init 1 */

  /* USER CODE END TIM6_Init 1 */
  TIM_InitStruct.Prescaler = 7199;
  TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
  TIM_InitStruct.Autoreload = 4999;
  LL_TIM_Init(TIM6, &TIM_InitStruct);
  LL_TIM_DisableARRPreload(TIM6);
  LL_TIM_SetTriggerOutput(TIM6, LL_TIM_TRGO_RESET);
  LL_TIM_DisableMasterSlaveMode(TIM6);
  /* USER CODE BEGIN TIM6_Init 2 */

  /* USER CODE END TIM6_Init 2 */

}

/* USER CODE BEGIN 1 */
void Delay_ms(uint32_t delay)
{
	TIM6->PSC = 7200 - 1;
	TIM6->ARR = 10 * delay - 1;
	TIM6->EGR |= 1;
	TIM6->CR1 = 0x0D;
	while(!(TIM6->SR));
	TIM6->SR = 0;
}

void Delay_us(uint32_t delay)
{
	TIM6->PSC = 8 - 1;
	TIM6->ARR = 9 * delay - 1;
	TIM6->EGR |= 1;
	TIM6->CR1 = 0x0D;
	while(!(TIM6->SR));
	TIM6->SR = 0;
}

/*
 * 描述:测量超声波模块返回脉冲宽度
 * 参数:
 * 	   GPIOx:Echo引脚所在端口
 * 	   PinMask:引脚号
 * 返回值:
 *     -1:返回信号的低电平超时
 *     -2:返回信号的高电平超时
 *     正数:超声波模块与障碍物的距离,以毫米为单位
 */
int Measure_Pulse_Len(GPIO_TypeDef *GPIOx, uint32_t PinMask)
{
	TIM6->PSC = 72 - 1;
	TIM6->ARR = 0xFFFF - 1;
	TIM6->EGR |= 1;
	int time = 0;
	TIM6->CR1 = 0x05;
	while(!LL_GPIO_IsInputPinSet(GPIOx, PinMask))
	{
		if(TIM6->SR)
		{
			TIM6->SR = 0;
			time++;
			if(time > 2) return -1;
		}
	}
	time = 0;
	TIM6->EGR |= 1;
	while(LL_GPIO_IsInputPinSet(GPIOx, PinMask))
	{
		if(TIM6->SR)
		{
			TIM6->SR = 0;
			time++;
			if(time > 2) return -2;
		}
	}
	TIM6->CR1 = 0x04;
	time = time * 65536 + TIM6->CNT;
	time = (time * 340) / 2000;
	return time;
}
/* USER CODE END 1 */

;

© 2018 - IOT小分队文章发布系统 v0.3