CubeMX中超声波HC-SR04的使用【HAL库】

该文详细介绍了如何使用HC-SR04超声波传感器,包括Hcsr04Init()用于初始化,Hcsr04Start()触发超声波,以及不同中断处理函数如Hcsr04TimOverflowIsr()和Hcsr04TimIcIsr()来计算距离。示例代码展示了在FreeRTOS操作系统下,通过串口1发送超声波测得的距离。
摘要由CSDN通过智能技术生成

函数概览

函数名传入参数1传入参数2返回值功能
Hcsr04Init()TIM_HandleTypeDef *htimuint32_t Channelvoid初始化超声波模块
Hcsr04Start()NoneNonevoid超声波触发
Hcsr04TimOverflowIsr()TIM_HandleTypeDef *htimNonevoid定时器计数溢出处理
Hcsr04TimIcIsr()TIM_HandleTypeDef* htimNonevoid计算距离
Hcsr04Read()NoneNonefloat读取距离
HAL_TIM_IC_CaptureCallback()TIM_HandleTypeDef *htimNonevoid输入捕获处理函数
HAL_TIM_PeriodElapsedCallback()TIM_HandleTypeDef *htimNonevoid定时器溢出中断处理函数

调用样例

Hcsr04Init()

int main()
{
    Hcsr04Init(&htim2,TIM_CHANNEL_1);  //初始化TIM2定时器通道1作为超声波传输数据通道    
}

Hcsr04Start()

int main()
{
    while(1)
    {
        Hcsr04Start();     //触发超声波模块,发出信号
    }  
}

HAL_TIM_PeriodElapsedCallback() Hcsr04TimOverflowIsr()

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)  //重定向中断处理函数
{
        Hcsr04TimOverflowIsr(htim);             //定时器溢出计数器计数
}
//以上两个函数均封装在hc-sr04.c文件中,无需手动调用

HAL_TIM_IC_CaptureCallback() Hcsr04TimIcIsr()

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)  //输入捕获中断函数
{
  Hcsr04TimIcIsr(htim);                 //输入捕获计算高电平时间->距离
}
//以上两个函数均封装在hc-sr04.c文件中,无需手动调用

超声波整体实现函数(用串口发送):

  /* USER CODE BEGIN StartDefaultTask */
    char buf[64];
    Hcsr04Init(&htim2,TIM_CHANNEL_1);
  /* Infinite loop */
  for(;;)
  {
        Hcsr04Start();      
        sprintf(buf,"distance:%.1f cm\r\n", Hcsr04Read());
        HAL_UART_Transmit_IT (&huart1 ,(uint8_t *)buf,strlen(buf));
        osDelay(300); //  ????300ms
    }
  /* USER CODE END StartDefaultTask */

样例采用串口1(usart1)发送,实际应用不需发送。

使用操作系统FreeRTOS需要把所有HAL_Delay替换成osDelay

ECHO初始配置为TIM2 CHANNEL_1 PA0引脚。 打开中断NVIC!!!

TIRG初始配置为PA4引脚,普通GPIO输出

                                     

TRIG与ECHO需要在此处进行宏定义,在封装函数中有使用

hc-sr04.c和hc-sr04.h文件下载链接:

百度网盘链接

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值