COMP2 para activar el modo One-Pulse en STM32L1

0

Estoy tratando de usar la salida de COMP2 para activar el modo de un impulso de un temporizador (en mi ejemplo TIM4, pero es bastante flexible si necesita cambiar a otro temporizador) en la serie STM32L1.

En el manual de referencia, la explicación del modo One-Pulse utiliza TI2FP2 como disparador del temporizador, que está vinculado a la captura de entrada en el canal 2 del temporizador; sin embargo, la salida del comparador solo se puede redirigir a captura de entrada en el canal 4 (a excepción de TIM10 pero no tiene un segundo canal para emitir el PWM en ...), o en OCREF Clear.

He intentado redireccionar la salida COMP2 a:

  • "OCxREF Clear" de TIM4,
  • la captura de entrada 4 de TIM4,
  • la captura de entrada 4 de TIM3 y el uso de ITR2 como disparador de TIM4 (ITR2 es TIM3 cuando se usa en TIM4)

pero ninguna de esas opciones funcionó.

¿Debería haber funcionado alguna de estas configuraciones y no las he configurado correctamente?

¿Se supone que debo hacerlo de manera diferente?

¿No hay manera de conectar los dos directamente y debo, por ejemplo, iniciar el modo One-Pulse desde la interrupción COMP2?

    
pregunta Benoît Vernier

1 respuesta

1

Al mirar el diagrama de bloques de los temporizadores, tampoco pude encontrar un método directo, aparentemente no hay señales que vayan del CH4 a la unidad de activación.

Si desea evitar interrupciones y tener un canal DMA gratuito adecuado, puede usarlo para iniciar otro temporizador. Puede usar TIM2_CH4 o TIM3_CH4 (estoy usando TIM3 en el ejemplo), pero no hay un canal DMA para TIM4_CH4 . Puedes mantenerte en TIM4 o usar cualquier otro temporizador como objetivo.

  • Configure TIM4 para el modo de un impulso, pero no lo inicie todavía. Averigüe qué valor iría en TIM4->CR1 y guárdelo en una variable de memoria, por ejemplo. volatile uint8_t tim4_cr1_start = TIM_CR1_OPM|TIM_CR1_CEN; para el caso más simple.
  • Configure DMA1_Channel3 , la dirección de memoria es &tim4_cr1_start desde arriba, la dirección periférica es &TIM4->CR1 , la longitud de transferencia es 1 . Use el modo de 8 bits, habilite el modo circular.
  • Establezca TIM3_CH4 para ingresar la captura, seleccionar la polaridad, etc. en TIM3_CCER y TIM3_CCMR2 .
  • Habilitar CC4DE , capturar / comparar 4 solicitudes de DMA en TIM3->DIER .
  • Inicia TIM3 .
  • Redirige la salida de COMP2 a TIM3_CH4 (puedes usar TIM2_CH4' too, but there is no DMA channel for TIM4_CH4 ').

Ahora, un evento de comparación activaría una captura en TIM3_CH4 , lo que ordenaría a DMA escribir un valor adecuado en TIM4->CR1 . Como el DMA está configurado en modo circular, copiaría el mismo valor a TIM4->CR1 en cada evento de captura subsiguiente.

    
respondido por el berendi

Lea otras preguntas en las etiquetas