[HAL库学习之路]9.输入捕获

记录自己的STM32的HAL库的学习之路,不定期更新…

一、Pinout

这里写图片描述

二、Clock Configuration

这里写图片描述

三、Configuration

这里写图片描述
这里写图片描述
这里写图片描述

四、Generate Code

这里写图片描述

代码
计数频率为1MHz,捕获到高电平后改变为下降沿捕获,并设置标志位,定时器更新中断来计算高电平时长,高电平时间

T=N0XFFFFFFFF+captureVal
其中N为定时器溢出次数,captureVal为捕获时定时器的值,单位为us

int main(void)
{

  /* USER CODE BEGIN 1 */
    long long temp = 0;
  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */
  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM5_Init();
  MX_USART1_UART_Init();

  /* USER CODE BEGIN 2 */
    HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_1);
    __HAL_TIM_ENABLE_IT(&htim5, TIM_IT_UPDATE);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
        HAL_Delay(10);
        if(captureStatus & 0x80)
        {
            temp = captureStatus & 0x3F;
            temp *= 0xFFFFFFFF;
            temp += captureVal;
            captureStatus = 0;
        }
  }
  /* USER CODE END 3 */

}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{

    if((captureStatus & 0x80) == 0)
    {
        if(captureStatus & 0x40)
        {
            if((captureStatus & 0x3F) == 0x3F)
            {
                captureStatus |= 0x80;
                captureVal = 0xFFFFFFFF;
            }
            else 
                captureStatus++;
        }
    }

}

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if((captureStatus & 0x80) == 0)
    {
        if(captureStatus & 0x40)
        {
            captureStatus |= 0x80;
            captureVal = HAL_TIM_ReadCapturedValue(&htim5, TIM_CHANNEL_1);
            TIM_RESET_CAPTUREPOLARITY(&htim5, TIM_CHANNEL_1);
            TIM_SET_CAPTUREPOLARITY(&htim5, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
        }
        else 
        {
            __HAL_TIM_DISABLE(&htim5);      
            captureStatus = 0;
            captureStatus |= 0x40;
            captureVal = 0;
            __HAL_TIM_SetCounter(&htim5, 0);
            TIM_RESET_CAPTUREPOLARITY(&htim5, TIM_CHANNEL_1);
            TIM_SET_CAPTUREPOLARITY(&htim5, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING);
            __HAL_TIM_ENABLE(&htim5);
        }
    }   
}
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Hal是一个用于嵌入式系统的硬件访问层。该提供了一些函数和接口,用于与硬件设备进行交互。在使用Hal进行输入捕获测量占空比时,可以按照以下步骤进行操作。 首先,需要选择一个支持输入捕获功能的硬件定时器。然后,需要使用Hal的相关函数来配置定时器的工作模式和输入捕获功能。 接下来,设置输入捕获的触发源。可以选择外部输入引脚或其他事件作为触发源,当触发事件发生时,定时器会记录下当前的计数值。 然后,启动定时器,开始计数。当触发事件发生时,Hal会自动记录下当前的计数值,并触发一个输入捕获事件。 在输入捕获事件中,可以通过Hal提供的接口,获取到输入捕获值。输入捕获值表示两个连续触发事件之间的定时器计数差值。 通过计算输入捕获值与定时器周期的比值,可以得到占空比。占空比表示高电平信号在一个周期内的持续时间占整个周期的比例。 最后,可以根据需求进行进一步的处理,比如计算平均占空比或根据占空比值做一些控制操作。 总之,使用Hal进行输入捕获测量占空比的步骤包括选择定时器、配置工作模式和输入捕获功能、设置触发源、启动定时器、获取输入捕获值并计算占空比。这样就可以实现对占空比的测量和处理。 ### 回答2: Hal是一个用于嵌入式系统的硬件抽象层。它提供了一组API,用于管理和访问硬件资源。在使用Hal时,我们可以使用输入捕获功能来测量信号的占空比。 输入捕获是一种用于测量和记录信号占空比的技术。在嵌入式系统中,我们通常会遇到需要测量某个信号的占空比的情况,例如PWM信号或时钟信号等。通过使用Hal提供的输入捕获功能,我们可以方便地进行这些测量。 使用Hal进行输入捕获测量占空比的步骤如下: 1. 初始化输入捕获功能:首先,我们需要初始化Hal输入捕获功能,以准备开始测量。通常,我们需要设置输入捕获的参数,如计数模式、采样频率等。 2. 开始捕获信号:一旦输入捕获功能初始化完成,我们就可以开始捕获需要测量的信号了。通过调用Hal提供的相应API函数,我们可以开始记录信号的时间信息。 3. 停止捕获信号:在信号捕获到一定的时间间隔后,我们可以停止捕获。通过调用Hal提供的停止捕获的函数,我们在此时停止记录时间信息。 4. 计算占空比:一旦停止捕获信号,我们可以使用记录的时间信息计算信号的占空比。通常,我们可以通过测量信号高电平和低电平的持续时间来计算占空比。 总的来说,Hal输入捕获功能提供了一种方便的方式来测量信号的占空比。通过使用Hal,我们可以轻松地进行这些测量,并且可以根据需要调整捕获的参数。这使得我们能够更好地理解和控制我们的嵌入式系统中的信号。 ### 回答3: HAL是一种有助于开发嵌入式系统的开源。它提供了丰富的功能和API,能够简化硬件驱动和应用程序开发的过程。 在HAL中,输入捕获是一种测量占空比的功能。占空比是指周期性信号中高电平所占的比例。输入捕获能够准确地测量信号的上升沿和下降沿的时间间隔,并计算出占空比。 在使用HAL进行输入捕获测量时,首先需要通过初始化GPIO引脚和定时器等外设来配置输入捕获功能。然后,可以使用HAL提供的API函数来启动输入捕获测量并获取测量结果。 例如,可以使用hal_input_capture_start()函数来启动输入捕获测量,并通过hal_input_capture_get_duty_cycle()函数获取测量结果。这个函数返回一个浮点数,表示输入信号的占空比。 使用HAL进行输入捕获测量还可以通过设置回调函数来实时获取测量结果。可以使用hal_input_capture_register_callback()函数注册回调函数,在每次捕获输入信号边沿时,HAL会调用这个回调函数,并把测量结果作为参数传递给回调函数。 总之,HAL提供了输入捕获功能,能够帮助开发人员方便地测量信号的占空比。通过合理配置和调用HAL的API函数,可以实现准确的输入捕获测量,并获取测量结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值