Cálculo del temporizador Tick STM32F4

Estoy tratando de usar el temporizador (TIM4) para registrar los tiempos de borde ascendente y descendente desde un sensor externo. Necesito configurar el temporizador para que marque cada 1 µs y tenga un período de 40 ms (así que cuente 40 000 tics antes de desbordarse). TIM4 tiene una velocidad de reloj fuente de 84 MHz. La hoja de datos dice:

"Prescaler programable de 16 bits utilizado para dividir la frecuencia del reloj contador por cualquier factor entre 1 y 65536".

Sin embargo, en la mayoría de los tutoriales se divide por 84 - 1 para obtener 1 MHz. ¿Alguien puede proporcionar las fórmulas exactas para calcular los parámetros? gracias de antemano

¿Qué "fórmulas" quieres? - Tenga en cuenta que dividir por 0 no tiene ningún sentido, por lo que tiene sentido usar 0 para 1, 1 para 2 y 65535 para 65536.

Respuestas (1)

La descripción del registro del preescalador establece que el reloj de entrada se divide por el valor del registro + 1. Por lo tanto, si su frecuencia de entrada es de 84 MHz y desea que el temporizador cuente a 1 MHz, debe programar 84-1 en el registro PSC para obtener un divisor de 84 y por lo tanto un contador de 1 MHz.

No se puede acceder al contador PSC interno, por lo que no hay solución para la limitación de 16 bits.

Programe el registro ARR con 39999, el desbordamiento ocurrirá en el siguiente (el borde 40000).

¿El OP ha cambiado la pregunta? La respuesta " es un temporizador de 16 bits, es imposible lograr que cuente hasta 4 millones " no tiene sentido, ¿así que tal vez lo borre? ¿Qué significa "flanco" en el contexto de "el flanco 40000"? Para mí, "flanco" significa el costado de algo, o un corte de bistec, que se usa en las fajitas, ¡mmm!
@gbulmer Sí, la pregunta fue editada, había 4 millones dentro de la pregunta original. Flank era un falso amigo: en alemán, el borde de una señal de reloj se llama "Flanke" (o al menos se puede llamar así), tengo dolor de cabeza, por lo que mi inglés sufre un poco. Gracias por señalar eso.