Configuración de un contador en STM32F405xx

¿Cómo se configura correctamente Timer9 (TIM9) en un STM32F405xx para contar pulsos en el flanco ascendente? ¿Existe una configuración especial para el pin del temporizador fuera de este breve ejemplo?

Esto es lo que he hecho hasta ahora y también seguí el BREVE contraejemplo del manual de referencia copiado aquí:

Por ejemplo, para configurar el contador ascendente para que cuente en respuesta a un flanco ascendente en la entrada TI2, use el siguiente procedimiento:

  1. Configure el canal 2 para detectar flancos ascendentes en la entrada TI2 escribiendo CC2S = '01' en el registro TIMx_CCMR1.

  2. Configure la duración del filtro de entrada escribiendo los bits IC2F[3:0] en el registro TIMx_CCMR1 (si no se necesita ningún filtro, mantenga IC2F='0000').

  3. Seleccione la polaridad del flanco ascendente escribiendo CC2P='0' y CC2NP='0' en el registro TIMx_CCER.
  4. Configure el temporizador en modo de reloj externo 1 escribiendo SMS='111' en el registro TIMx_SMCR.
  5. Seleccione TI2 como fuente de entrada de disparo escribiendo TS='110' en el registro TIMx_SMCR.
  6. Habilite el contador escribiendo CEN='1' en el registro TIMx_CR1.

Creo que he hecho lo anterior correctamente, pero leer el registro devuelve 0 siempre. ¿Hay alguna configuración adicional dentro de un registro diferente para conectar el temporizador? Estuve leyendo alternate functionspero no pude encontrar nada específico sobre Timers and Pins.

Estoy siguiendo vagamente esto como una referencia de código: https://www.ghielectronics.com/docs/108/register-access

Hoja de datos del chip: http://www.st.com/web/en/resource/technical/document/datasheet/DM00037051.pdf

Manual de referencia de la familia de chips: http://www.st.com/web/en/resource/technical/document/reference_manual/DM00031020.pdf

¿Has habilitado todos los relojes requeridos? Por ejemplo, TIM9 está en APB2, por lo que si no ha habilitado ese reloj, el temporizador no funcionará.
@A.Mac Interesante. Encontré el registro: RCC_APB2ENRen el manual de referencia, pero no puedo encontrar la dirección en la hoja de datos.
@A.Mac que encontré RCCen el bus AHB1 a partir de 0x40023800 y el manual de referencia muestra un desplazamiento de 0x44 para RCC_APB2ENR. el bit 16 es TIM9EN. Configuré ese bit y sigo obteniendo cero.
No es realmente necesario tratar directamente con las direcciones de registro.
Lo siento, soy bastante nuevo en publicar en SE, así que publiqué el comentario cuando solo estaba tratando de agregar un salto de línea. De todos modos, como estaba diciendo, en lugar de tratar directamente con las direcciones de registro, puede usar los #defines más comprensibles para los humanos como el <code>RCC_APB2ENR</code>. Siempre que haya incluido los encabezados adecuados, el compilador sabrá de lo que está hablando. Por ejemplo, para habilitar el reloj para TIM2 usaría <código> RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; </code> También sería útil que publique su código (preferiblemente después de actualizar desde el uso de direcciones de registro).
@A.Mac Estoy usando una clase personalizada escrita para netMF por GHI para acceder a los registros. Consulte el primer enlace en mi pregunta para ver cómo se ve el código. Tengo que desenterrar los registros reales de las hojas de datos.

Respuestas (1)

Lo primero que siempre compruebo es asegurarme de que todos los relojes que necesito estén encendidos. Deberá asegurarse de que los relojes para APB2 (TIM9) y AHB1 (GPIO) estén encendidos. Además, las funciones del temporizador son funciones alternativas, por lo que deberá configurar los GPIOx_MODERbits para el puerto y el pin apropiados que está utilizando, así como los GPIOx_AFRybits apropiados.

La hoja de datos y el manual de referencia deben tener toda la información que necesita, a veces solo se necesita algo de esfuerzo para encontrar lo que está buscando.

¡Gracias de nuevo! Olvidé preguntar, ¿cuál es la forma correcta de restablecer el conteo en el TIMx_CNTregistro a 0? Intenté usar RCC_APB2RSTRpara restablecer, pero creo que eso lo restablece todo a los valores predeterminados.
Creo que lo entendí: establecer UGel bit en 1 TIMx_EGRparece restablecer el contador y no afectar el resto de la configuración ... hasta ahora