这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 在Tc397中如何用Tim捕捉时间戳?

共2条 1/1 1 跳转至

在Tc397中如何用Tim捕捉时间戳?

工程师
2024-03-10 21:37:03     打赏

请问各大神在Tc397中如何用tim捕捉时间戳?    




关键词: Tc397     TIM     时间戳     控制器    

助工
2024-03-10 21:37:55     打赏
2楼

Tim工作起来,直接读Tim的寄存器就可以了,时间戳的格式根据需求自定义,也可是寄存器里面的原始数据。 

有个例子,可以作为参考:

1. 首先,需要配置TIM为捕获模式,并设置相关参数。例如,选择TIM3,并将其配置为捕获模式,设置预分频器和计数器周期等。

```
TIM_HandleTypeDef htim3;
TIM_IC_InitTypeDef sConfig;

htim3.Instance = TIM3;
htim3.Init.Prescaler = 0;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 0xFFFFFFFF;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if (HAL_TIM_IC_Init(&htim3) != HAL_OK)
{
  // 初始化失败处理
}

sConfig.ICPrescaler = TIM_ICPSC_DIV1;
sConfig.ICFilter = 0;
sConfig.ICPolarity = TIM_ICPOLARITY_FALLING;
sConfig.ICSelection = TIM_ICSELECTION_DIRECTTI;

if (HAL_TIM_IC_ConfigChannel(&htim3, &sConfig, TIM_CHANNEL_1) != HAL_OK)
{
  // 配置失败处理
}
```

2. 接下来,配置并使能输入捕获通道中断。

```
HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM3_IRQn);
```

3. 最后,在中断处理函数中获取时间戳。

```
void TIM3_IRQHandler(void)
{
  HAL_TIM_IRQHandler(&htim3);
}

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
  if (htim->Instance == TIM3)
  {
    uint32_t timestamp = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
    // 处理时间戳
  }
}
```

这样,当TIM3捕获到输入信号时,中断将触发并调用`HAL_TIM_IC_CaptureCallback`函数,在其中可以读取时间戳并进行相应的处理。 


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]