我正在使用STM32F103芯片,试图配置和使用其中一个定时器。我已经使用STM32CubeMX生成了初始化Timer 2的代码。我通过调用HAL_TIM_Base_Start来启动计时器。然后,在循环中,我通过调用htim2.Instance->CNT或调用宏__HAL_TIM_GetCounter(我认为它只返回相同的值)来打印出当前的计时器值。但无论我做什么,计数值都显示为零。我也尝试在开头调用__TIM2_CLK_ENABLE(),但没有任何区别。
我已经搜索了解决方案,发现了一些关于这个问题的问题,但没有找到解决方法。
有人知道我做错了什么吗?
谢谢。
这是初始化定时器的例程。此代码由STM32CubeMX生成,我没有修改它:
“Serial”类是我编写的一个类,通过USB串口与我的电脑通信。
我已经搜索了解决方案,发现了一些关于这个问题的问题,但没有找到解决方法。
有人知道我做错了什么吗?
谢谢。
这是初始化定时器的例程。此代码由STM32CubeMX生成,我没有修改它:
/* TIM2 init function */
static void MX_TIM2_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_MasterConfigTypeDef sMasterConfig;
htim2.Instance = TIM2;
htim2.Init.Prescaler = 0;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 0;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
然后在主函数中,我尝试启动计时器并打印出它的值。这是我用来执行此操作的代码:
__TIM2_CLK_ENABLE();;
HAL_TIM_Base_Start(&htim2);
while (true)
{
Serial.println((long) __HAL_TIM_GetCounter(&htim2));
delay(100);
}
“Serial”类是我编写的一个类,通过USB串口与我的电脑通信。
tim2
的时钟?如果你正在使用HAL,它将是一个名为RCCAPB1ClkCmd
的调用。 - ColinRCC_APB1PeriphClockCmd
。 - Colin