C语言 如何防止计数器重新启动?



我目前正在研究一个精度为µs的计数器。我是这样初始化它的:

u32_ticks = (HAL_RCC_GetHCLKFreq() / 1000000);
pst_TimerHandle->Instance = RBC_TIM3_INSTANCE;
pst_TimerHandle->Init.Prescaler = u32_ticks - 1;
pst_TimerHandle->Init.CounterMode = TIM_COUNTERMODE_UP;
pst_TimerHandle->Init.Period = 65535;
pst_TimerHandle->Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
pst_TimerHandle->Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(pst_TimerHandle) != HAL_OK)
{
error_handling()
}
st_ClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(pst_TimerHandle, &st_ClockSourceConfig) != HAL_OK)
{
error_handling()
}
st_MasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
st_MasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(pst_TimerHandle, &st_MasterConfig) != HAL_OK)
{
error_handling()
}

是否有可能防止计数器在达到ARR值后重新启动到0 ?换句话说,我希望我的计数器停在65535。

如果是,我该如何让它在需要时从0重新启动呢?

谢谢

编辑:我正在STM32F407上工作,我计划使用一个通用定时器(这个平台上的TIM2到5)。

TIMx_CR1中的OPM位应该可以完成工作。

在HAL手册中,您应该找到HAL_TIM_OnePulse_MspInit而不是HAL_TIM_Base_Init的引用。如果你已经用CUBEMx生成了你的应用框架,那么也应该有一个选项。

最新更新