Estoy aprendiendo un poco sobre los temporizadores de propósito general en mi tablero de descubrimiento STM32F4, y me gustaría saber cómo puedo configurar el temporizador para que active una interrupción del temporizador cada segundo, o al menos que el valor de recarga automática se restablezca a 0 cada 1 segundo.
Sé que la MCU funciona a 168MHz, y estoy usando el reloj interno como la fuente del reloj TIM2. Me gustaría entender mejor cómo puedo calcular el valor de preescala, el período y la división de reloj apropiados para lograr 1 segundo.
TIM_HandleTypeDef timeBase;
timeBase.Instance = TIM2;
timeBase.Init.Prescaler = 0;
timeBase.Init.CounterMode = TIM_COUNTERMODE_UP;
timeBase.Init.Period = 168000000; // Hypothetical value (Period cannot be greater than 65535)
timeBase.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&timeBase);
¿Tengo razón al decir que lo anterior, con un preescalador de 0, un período de 168000000 y una división de reloj de 1 hará que el valor de la recarga automática del temporizador se restablezca a 0 cada 1 segundo?
Ahora, el período tiene un valor máximo de 0xFFFF (65535), así que para mí eso significa que necesito manipular el valor del prescaler y el período para lograr un restablecimiento del valor de recarga automática de 1 segundo.
¿Hay una fórmula para hacer esto?