Forum: Mikrocontroller und Digitale Elektronik STM32 hängt bei UART Overrun


von Marcel (Gast)


Lesenswert?

Hallo,

Ich benutze die HAL Bibliothek von STM32 und habe jetzt einen UART zum 
Laufen bekommen. Bei einem Fehler werden (zunächst für Debugzwecke) 
diese Funktionen aufgerufen. Dabei löscht die HAL Bibliothek selbständig 
die Flags und ruft HAL_UART_ErrorCallback im Falle eines Fehlers auf.

void HAL_UART_ErrorCallback(UART_HandleTypeDef *UartHandle)
{
    Error_Handler();
}

void Error_Handler(void)
{
  /* Turn LED2 on */
  BSP_LED_On(LED2);
  while(1)
  {
    /* Error if LED2 is slowly blinking (1 sec. period) */
    BSP_LED_Toggle(LED2);
    HAL_Delay(1000);
  }
}

Wenn ich einen Overrun provoziere, bleibt das Programm aber im HAL_Delay 
stecken. Die LED blinkt nicht; der uwTick Counter zählt nicht hoch. Wenn 
ich den ErrorHandler nicht aufrufe und einfach nichts mache (in der 
Callback Funktion) läuft das Programm normal weiter.
Woran könnte es liegen, dass der ErrorHandler nicht funktioniert? Wenn 
ich diesen zB in der main aufrufe funktioniert die Funktion.

von chris (Gast)


Lesenswert?

Marcel schrieb:
> Woran könnte es liegen, dass der ErrorHandler nicht funktioniert? Wenn
> ich diesen zB in der main aufrufe funktioniert die Funktion.

HAL_Delay läuft vermutlich über einen Timer Interrupt, dessen Priorität 
scheinbar niedriger ist als die des UART Interrupts.
Somit kommt der Timerinterrupt nicht mehr dran und dein delay 
funktioniert nicht mehr.

von STM32 (Gast)


Lesenswert?

Ich arbeite nicht mit der HAL-Lib, sonder mit der Standard-Lib. Da mache 
ich das folgendermassen:


    if (USART_GetFlagStatus(USART1, USART_FLAG_ORE)) // on overrun
    {
        USART_ReceiveData(USART1);                   // clear flag
    }
    else
    {
        if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
        {
          .....
        }
    }


Vielleicht hilft's....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.