Comprensión de los registros de temporizadores, contadores y preescaladores en el STM32

Así que estoy tratando de configurar una interrupción periódica muy simple en mi placa STM32VL-Discovery usando las bibliotecas libopencm3 en Linux. Revisé la documentación y solo quiero verificar con alguien que entiendo lo que está pasando.

Tengo entendido que el registro del preescalador escala el reloj interno a otra frecuencia/reloj que el temporizador realmente ve. es decir, configura el registro del preescalador del temporizador en 24 Mhz/Hz deseado para que el temporizador funcione a la frecuencia deseada. ¿Es esto correcto?

Suponiendo que sea correcto, digamos que quiero generar una interrupción en cada ciclo de reloj del temporizador. No vi nada en los documentos que me permitiera hacer eso además de establecer el registro de período en 1. Esto generaría una interrupción de desbordamiento en cada reloj, ¿correcto?

Eso suena aproximadamente correcto, pero la dificultad siempre está en los detalles, incluido recordar encender y activar todo primero. Las bibliotecas de periféricos de la serie STM32 vienen con muchos ejemplos, primero puede buscar un ejemplo de interrupción del temporizador. Si no está allí, puede consultar en otra parte de la serie STM32, ya que los métodos generales tienden a ser comparables, aunque los registros específicos, las llamadas y las asignaciones de bus periférico difieren entre las familias.
Ver (algo) relacionado con la configuración de los relojes en el STM32: electronics.stackexchange.com/questions/58863/…
Gracias chicos. Lo que hice funcionó. Solo quería entenderlo mejor y ambos me permitieron hacerlo.

Respuestas (1)

Si simplemente establece el registro de período en 1, esto no habilitará automáticamente la generación de interrupciones. Deberá realizar 2 pasos adicionales:

  1. Habilite la interrupción de 'actualización' para su temporizador usando la función TIM_ITConfig().
  2. Habilite la fuente de interrupción del temporizador en el controlador de interrupción llamando a NVIC_Init() con los parámetros apropiados.

Por supuesto, no debe olvidar habilitar el cronometraje de su periférico con temporizador utilizando APB1PeriphClockCmd().

Hay un ejemplo detallado sobre la configuración de temporizadores en STM32F4-Discovery aquí: http://visualgdb.com/tutorials/arm/stm32/timers/

STM32VL-Discovery es un poco diferente, sin embargo, los pasos principales son los mismos.