单片机/MCUwilliam hill官网
直播中

汪潇潇

7年用户 800经验值
私信 关注
[问答]

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

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

回帖(2)

陈萍

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

lique

2024-1-22 13:44:10
在Tc397中,可以使用以下代码利用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`函数,在其中可以读取时间戳并进行相应的处理。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分