STM32 HAL_DELAY se cuelga con HAL_GetTick = 0 [cerrado]

0

Entorno: GNU_ARM, STM32F407

Cada vez que uso hal_delay() , el programa se bloquea justo antes de la llamada a hal_delay() .

Agregué:

printf("\n%d==>%d,",tickstart,HAL_GetTick());

en el bucle de HAL_DELAY. El resultado es siempre: 0==>0

HAL_GetTick() no funciona como se esperaba incluso después de agregar:

HAL_NVIC_SetPriority(SysTick_IRQn,0,0);

¿Cómo puedo resolver esto?

    
pregunta shi

2 respuestas

5

Como usuario avanzado de STM32, puedo decir que no manejó la interrupción de SysTick.

La biblioteca HAL habilita el temporizador SysTick e interrumpe para ello.

En el archivo stm32f4xx_it.c, agregue esta función llamada:

void SysTick_Handler(void) {
    HAL_IncTick();
}

Entonces debería funcionar.

    
respondido por el tilz0R
1

Cuando usa un HAL_DELAY, debe tener en cuenta que el conteo se realiza en la rutina de interrupción SysTick. Si llama a HAL_DELAY en la interrupción que tiene mayor prioridad, entonces el conteo de systick se detiene. Entonces, HAL_DELAY se queda atascado en el bucle infinito do ... mientras que, porque el systick no está contando. El remedio sería establecer la interrupción de Systick en una prioridad más alta.

    
respondido por el Marko Buršič

Lea otras preguntas en las etiquetas