STM32 hängt bei UART Overrun

Gast #4810548
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.
Gast #4810551
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.
Gast #4810561
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....

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.