Haciendo un retraso de 100 microsegundos para STM32L0

1

Necesito crear un retraso de 100 microsegundos para STM32L0 usando HAL. Tengo HSE 12 MHz. APB1 temporizador relojes 12MHz.

htim6.Instance = TIM6;
htim6.Init.Prescaler = 1199;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 1;

Cuando tengo un bucle de 50000 iteraciones que envuelven las llamadas al temporizador TIM6 básico de inicio / parada de sondeo ( HAL_TIM_Base_Start ), entonces tengo un retraso de 10 segundos en lugar de 5 segundos (el bucle externo sirve solo para la escala de tiempo). ¿Es normal? He esperado 50000 * 100 microsegundos = 5 segundos. ¿Debo usar otro temporizador? Necesito + -10 microsegundos delta. Por cierto, STM32L0 HAL no contiene una "versión de microsegundos" de HAL_delay .

    
pregunta ilya

1 respuesta

1

Usted está agregando 50,000 iteraciones que contienen un cheque y aumentan para un contador. Si esto tomaría por ejemplo 5 ciclos de reloj por iteración, este resultado es de 250,000 ciclos. Con un reloj de 12 MHz, esto es 20,8 ms, que de todos modos está por encima de su requerimiento.

No veo el retraso adicional de 5 segundos, pero incluso 20,8 ms es demasiado. Podría estar relacionado con el manejo de la pila si llama a una función separada, aún mucho más que 5 segundos es mucho, pero será (mucho) mayor que 20,8 ms.

La solución sería poner el valor correcto directamente en el prescaler / periodo del temporizador y eliminar el contador / bucle.

    
respondido por el Michel Keijzers

Lea otras preguntas en las etiquetas