Я использую микросхему STM32F103 и пытаюсь настроить и использовать один из таймеров. Я использовал STM32CubeMX для генерации кода, который инициализирует Timer 2. Я запускаю таймер, вызывая HAL_TIM_Base_Start. Затем в цикле я распечатываю текущее значение таймера с помощью вызова htim2.Instance-> CNT или поочередно, вызывая макрос __HAL_TIM_GetCounter (который, я считаю, просто возвращает то же значение). Однако, независимо от того, что я делаю, значение счетчика отображается как ноль. Я также попытался вызвать __TIM2_CLK_ENABLE () в начале, но это не имеет значения.
Я искал решение и нашел пару вопросов по этой проблеме, но не нашел решения.
Кто-нибудь знает, что я делаю неправильно?
Спасибо.
Вот процедура, которая инициализирует таймер. Этот код был сгенерирован 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.