mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32: DMA Callbacks werden nicht aufgerufen, seltsamer Bug in der Cube-HAL


Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nach einem Tag festgestellt, warum Code, der früher ging, mit einer 
aktuelleren CubeHAL (STM32Cube FW_F3 V1.8.0, welche CubeMX V4.21.0 heute 
runtergeladen hat) nicht mehr ging:

Ich initialisiere einen DMA, u.a. so:
  dmaCC2.XferCpltCallback  = DMA_TransferCompleteHandler;
  dmaCC2.XferHalfCpltCallback = DMA_TransferHalfHandler;

und der wird dann aber nicht aufgerufen, und seltsamerweise steht statt 
einem Pointer auf die besagten Funktionen nach der Initialisierung immer 
eine Null in der entsprechenden Struktur drin.

Irgendwann habe ich dann dieses Stück Code gefunden in der 
stm32f3xx_hal_dma.c:
HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma)
{ 
//viel Code

  /* Clean callbacks */
  hdma->XferCpltCallback = NULL;
  hdma->XferHalfCpltCallback = NULL;
  hdma->XferErrorCallback = NULL;
  hdma->XferAbortCallback = NULL;

//mehr Code
}
Kaum kommentiert man das Zeug da aus funktioniert alles wieder...

Mache ich da was grundlegend falsch, oder ist das ein ziemlich doofer 
Bug in der HAL?
Wenn dann gehört das doch, meiner Meinung nach, in die DeInit rein, oder 
wo liegt der Sinn daran, die Callback-Pointer zu definieren und am Ende 
der Initialisierungsfunktion wieder zu nullen, bevor die je aufgerufen 
werden könnten?

Autor: Mampf F. (mampf) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Robert schrieb:
> Wenn dann gehört das doch, meiner Meinung nach, in die DeInit rein, oder
> wo liegt der Sinn daran, die Callback-Pointer zu definieren und am Ende
> der Initialisierungsfunktion wieder zu nullen, bevor die je aufgerufen
> werden könnten?

Hmm, gute Frage ... Genau könnte man es vmtl erst sagen, wenn du den 
kompletten Code postest :)

Aber HAL ansich hat schon einige Bugs und teilweise fehlen grundlegende 
Initialisierungen, damit irgendetwas überhaupt funktioniert.

Beispielsweise hatte ich das Problem mit DMA, dass zwar DMA ansich 
konfiguriert wurde und die IRQ-Handler angelegt wurden, aber zB der NVIC 
nicht usw ...

: Bearbeitet durch User
Autor: pegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Etwas weiter unten in der Datei gibt es die Funktion:
HAL_DMA_RegisterCallback

Wie immer ist es ein Vorteil erst mal einen Blick in die mitgelieferten 
Beispiele zu werfen.

z.B.:
STM32Cube_FW_F3_V1.8.0/Projects/STM32F303RE-Nucleo/Examples/DMA/DMA_FLAS 
HToRAM/Src/main.c
  /*##-4- Initialize the DMA channel ##########################################*/
  if (HAL_DMA_Init(&DmaHandle) != HAL_OK)
  {
    /* Initialization Error */
    Error_Handler();
  }
  
  /*##-5- Select Callbacks functions called after Transfer complete and Transfer error */
  HAL_DMA_RegisterCallback(&DmaHandle, HAL_DMA_XFER_CPLT_CB_ID, TransferComplete);
  HAL_DMA_RegisterCallback(&DmaHandle, HAL_DMA_XFER_ERROR_CB_ID, TransferError);


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.