基于stm32单片机srf04超声波传感器测距Proteus仿真

发布于:2022-11-05 ⋅ 阅读:(458) ⋅ 点赞:(0)

资料编号:185    下面是仿真功能视频演示:

185-基于stm32单片机srf04超声波传感器测距Proteus仿真

功能讲解:

采用stm32单片机作为控制CPU,LCD1602显示超声波测距的距离值,SRF04超声波传感器来进行测距,超声波测距原理如下:超声波测距原理是在超声波发射装置发出超声波,它的根据是接收器接到超声波时的时间差,与雷达测距原理相似。超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时,通过时间可以算出和物体之间的距离。

下面是该程序的展示:

void TIM3_Init(u16 arr,u16 psc)
{  
    TIM3_Handler.Instance=TIM3;                          //通用定时器3
    TIM3_Handler.Init.Prescaler=psc;                     //分频系数
    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //向上计数器
    TIM3_Handler.Init.Period=arr;                        //自动装载值
    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子
    HAL_TIM_Base_Init(&TIM3_Handler);
    
    HAL_TIM_Base_Start_IT(&TIM3_Handler); //使能定时器3和定时器3更新中断:TIM_IT_UPDATE

    HAL_TIM_Base_MspInit(&TIM3_Handler);
    
}

//定时器底册驱动,开启时钟,设置中断优先级
//此函数会被HAL_TIM_Base_Init()函数调用
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
    if(htim->Instance==TIM3)
    {
        __HAL_RCC_TIM1_CLK_ENABLE();            //使能TIM3时钟
        __HAL_RCC_TIM3_CLK_ENABLE();            //使能TIM3时钟
        HAL_NVIC_SetPriority(TIM3_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3
        HAL_NVIC_EnableIRQ(TIM3_IRQn);          //开启ITM3中断           
    }
}

//定时器3中断服务函数
void TIM3_IRQHandler(void)
{    
   msHcCount++;
   HAL_TIM_IRQHandler(&TIM3_Handler);
}

//回调函数,定时器中断服务函数调用
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim==(&TIM3_Handler))
    {
        
    }
}

void SRF04_init(void)
{
    GPIO_InitTypeDef GPIO_Initure;

    __HAL_RCC_GPIOB_CLK_ENABLE();          
    
    GPIO_Initure.Pin=GPIO_PIN_5; 
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  
    GPIO_Initure.Pull=GPIO_PULLUP;          
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;        
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);

    GPIO_Initure.Pin=GPIO_PIN_6; 
    GPIO_Initure.Mode=GPIO_MODE_INPUT;  
    GPIO_Initure.Pull=GPIO_NOPULL;          
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;        
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}

void Delay_Ms(uint16_t time)  //延时函数

    uint16_t i,j;
    for(i=0;i<time;i++)
          for(j=0;j<10260;j++);
}

下面是该资料的分享下载链接:

https://pan.baidu.com/s/1CTqld-zJR80hvn0Bj3u0-w?pwd=3rgz 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到