Yo uso un STM32F103c8t6. Lo que quiero es medir el tiempo entre varias declaraciones. Descubrí que HAL_getTick no funciona porque la resolución es demasiado pequeña (1 ms).
Sin embargo, parece que no puedo inicializar el temporizador correctamente. Con CubeMX seleccioné:
TIM2: Modo esclavo: modo disparo Fuente de disparo: ITR0 Fuente del reloj: Reloj interno Descanso deshabilitado
Y se genera el siguiente código:
/* TIM2 init function */
static void MX_TIM2_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_SlaveConfigTypeDef sSlaveConfig;
TIM_MasterConfigTypeDef sMasterConfig;
htim2.Instance = TIM2;
htim2.Init.Prescaler = 35999;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 35999;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
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__);
}
if (HAL_TIM_OnePulse_Init(&htim2, TIM_OPMODE_SINGLE) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
sSlaveConfig.InputTrigger = TIM_TS_ITR0;
if (HAL_TIM_SlaveConfigSynchronization(&htim2, &sSlaveConfig) != 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__);
}
}
Mi propio código en el bucle main / while:
....
__HAL_RCC_TIM2_CLK_ENABLE();
Y luego obtengo el valor con
uint32_t value = __HAL_TIM_GET_COUNTER(&htim2);
Sin embargo, solo veo que 0 están regresando de esta función.
Me pregunto si el temporizador se inició (intenté hacerlo muy poco después de la inicialización del temporizador, pero no hice una diferencia). El temporizador siempre tiene el estado HAL_TIM_STATE_READY.
¿Cómo debo iniciar (y posiblemente reiniciar) el temporizador?