Estoy trabajando con un tablero de descubrimiento STM32F4 y me he encontrado con un poco de comportamiento inusual del que espero que alguien pueda explicarme la causa. Mi objetivo es configurar un temporizador para activar una interrupción a 100 Hz (es decir, un período de 10 ms). Es importante para mi proyecto que este valor sea lo más cercano a 10 ms posible. El reloj de mi sistema está configurado a 168 MHz, y el temporizador que estoy usando está sincronizado en el bus APB2, que está cronometrado en 84 MHz, pero como los temporizadores funcionan al doble de la velocidad del reloj de su bus, el reloj de mi temporizador también funciona a 168 MHz .
Para obtener mi período de 10 ms, tendría que configurar mis valores de preescalador y período en la estructura TIM_TimeBaseInitTypeDef a valores enteros de 16 bits. Los valores iniciales que elegí fueron 60000 para el prescaler y 28 para el período. 168 MHz / 60K = 2800 Hz. Luego, establecer mi período en 28 debería proporcionarme un evento de actualización a 100 Hz.
Estoy bastante seguro de que mi matemática se comprueba, sin embargo, cuando medí el momento en que se disparó mi interrupción, mi período fue algo más cercano a 10.33 ms, en lugar de los 10 ms esperados. Después de jugar con otras configuraciones, decidí intentar cambiar los valores de preescalador y período para ver si las configuraciones de tiempo cambiaron. Para mi sorpresa, lo hicieron. Para los valores de período que probé, los dibujé en la siguiente gráfica:
Dosobservacionesprincipalesqueveo:
1)Cambiarelperíodoporelprescaleryviceversadacomoresultadoelmismoperíodomedido
2)Cuantomáscercaesténelperíodoylosvaloresdelprescaler,máscercaestaráeltiempomedidodelperíododeseado.
¿Alguiensabeporquéestoes?Meparecequenohaydiferenciaentreelpar(60000,28)y(1344,1250)entérminosdecálculodelperíodo(esdecir,ambossemultiplicana1680000)
Editar:heañadidounenlaceamicódigo
Edit2: Siento que los comentarios se desvían de mi pregunta intencional. Mi problema no es que no pueda obtener un período de 10 ms. Mi pregunta es ¿POR QUÉ establecer el preescalador y el período en valores más separados entre sí en un período menos preciso?