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:
1 | dmaCC2.XferCpltCallback = DMA_TransferCompleteHandler;
|
2 | 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:
1 | HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma)
|
2 | {
|
3 | //viel Code
|
4 |
|
5 | /* Clean callbacks */
|
6 | hdma->XferCpltCallback = NULL;
|
7 | hdma->XferHalfCpltCallback = NULL;
|
8 | hdma->XferErrorCallback = NULL;
|
9 | hdma->XferAbortCallback = NULL;
|
10 |
|
11 | //mehr Code
|
12 | }
|
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?