找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2209|回复: 0
打印 上一主题 下一主题
收起左侧

STM32超声波(HAL库)

[复制链接]
跳转到指定楼层
楼主
ID:336427 发表于 2020-2-5 23:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  MX_GPIO_Init();
  MX_TIM4_Init();
  MX_USART1_UART_Init();
  MX_TIM5_Init();
  /* USER CODE BEGIN 2 */
        delay_init();
//        OLED_init();//oled初始化
        CSB_Init();//超声波初始化
        


  printf ( "STM32 输入捕获实验\n" );
        printf ( "按下KEY1,测试KEY1按下的时间\n" );//当初测试时没来得及修改,不影响程序正常进行
                        t=' ';
  while (1)
  {

  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
                    /* 超声波触发信号*/
                GPIO_SetBits(GPIOA,GPIO_PIN_1);
                US100_DelayUS(20);
                GPIO_ResetBits(GPIOA,GPIO_PIN_1);
               
    /* 进行超声波反馈高电平脉宽测量*/
    if(strCapture.ucFinishFlag == 1 )
                {
      /*计算高电平数值 */
                        ulTime = strCapture .usPeriod * GENERAL_TIM_PERIOD + strCapture .usCtr;
      temp=((ulTime % ulTmrClk)*340)/(1000*2);
      printf ( ">>测得距离为%dmm\n",temp);
                        
      strCapture .ucFinishFlag = 0;               
      HAL_Delay(100);      
                }
               

  }
  /* USER CODE END 3 */

}
定时器中断回调函数
/**
  * oˉêy1|Äü: ¶¨ê±Æ÷êäèë2¶»ñÖD¶Ï»Øμ÷oˉêy
  * êäèë2Îêy: htim£o¶¨ê±Æ÷¾ä±ú
  * ·μ »Ø Öμ: ÎT
  * Ëμ    Ã÷: ÎT
  */
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
  TIM_IC_InitTypeDef sConfigIC;
  
  if ( strCapture .ucStartFlag == 0 )
  {   
    __HAL_TIM_SET_COUNTER(htim,0); //清除定时器计数
    strCapture .usPeriod = 0;                        
    strCapture .usCtr = 0;
   
    // 配置输入捕获参数。主要是修改触发电平
    sConfigIC.ICPolarity = GENERAL_TIM_END_ICPolarity;
    sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
    sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
    sConfigIC.ICFilter = 0;
    HAL_TIM_IC_ConfigChannel(&htim5, &sConfigIC, GENERAL_TIM_CHANNELx);
    // 清除中断标志位
    __HAL_TIM_CLEAR_IT(htim, GENERAL_TIM_IT_CCx);
    // 启动输入捕获并开启中断
    HAL_TIM_IC_Start_IT(&htim5,GENERAL_TIM_CHANNELx);   
    strCapture .ucStartFlag = 1;                        
  }               
  
  else
  {   
    // 获取定时器计数值
    strCapture .usCtr = HAL_TIM_ReadCapturedValue(&htim5,GENERAL_TIM_CHANNELx);
    //配置输入捕获参数,主要是修改触发电平
    sConfigIC.ICPolarity = GENERAL_TIM_STRAT_ICPolarity;
    sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
    sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
    sConfigIC.ICFilter = 0;
    HAL_TIM_IC_ConfigChannel(&htim5, &sConfigIC, GENERAL_TIM_CHANNELx);
   
    // 清除中断标志位
    __HAL_TIM_CLEAR_IT(htim, GENERAL_TIM_IT_CCx);
    //启动输入捕获并开启中断
    HAL_TIM_IC_Start_IT(&htim5,GENERAL_TIM_CHANNELx);   
    strCapture .ucStartFlag = 0;                        
    strCapture .ucFinishFlag = 1;   
  }
}

以下代码请见tim.c
void CSB_Init(void)
{
        ulTmrClk = HAL_RCC_GetHCLKFreq()/GENERAL_TIM_PRESCALER;   
        /*启动定时器*/
        HAL_TIM_Base_Start_IT(&htim5);  
        /*启动定时器输入捕获并开启中断*/
        HAL_TIM_IC_Start_IT(&htim5,GENERAL_TIM_CHANNELx);
        /*复位超声波引脚*/
        GPIO_ResetBits(GPIOA,GPIO_PIN_1);
        GPIO_ResetBits(GPIOA,GPIO_PIN_0);
}

可用超声波模块函数.7z

3.79 MB, 下载次数: 77, 下载积分: 黑币 -5

HAL库版本32超声波

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表