Gast
#4629863
Ich habe gerade mal mit Stm32CubeMX auf einem Stm32F103C8 ein Projekt generieren lassen mit einer minimalen USB-CDC Initialisierung. Leider kam es immer wieder zu Hardfaults. Grund ist ein definitiver Fehler im Code den CubeMx generiert. Falls jemand auch schon mal daran fast verzweifelt ist hier die Lösung: In der Datei usbd_conf.c wurden die beiden Funktionen USBD_static_malloc und USBD_static_free implementiert die intern aus der USB-Lib gerufen werdern. Dabei wird aber kein dynamischer Speicher allociert sondern den einen einzigen nötigen Aufruf auf statischen Speicher gemappt. Blöd nur wenn man das dann dynamisch mit free wieder frei gibt:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
die Zeile mit free(p) sollte auskommentiert werden, dann geht es. Je nachdem welche Umgebung zum Einsatz kommt ist free nicht oder als dummy implementiert. Da fällt dann dieser Fehler nicht auf. Anderenfalls sucht man sich blöd, da es nicht im free() abschmiert sondern erst im nächsten Interrupt. Eventuell hilft das ja jemanden, das wird sicher auch alle anderen STM32 mit USB betreffen.