Hallo,
ich versuche gerade den HAL Code durch selbst geschriebenen zu ersetzen.
Ziel ist hinterher DMA zu verwenden, was leider mit der HAL Lib nicht
funktioniert.
Leider funktioniert aber das eigentlich recht einfache SPI ohne DMA
schon nicht mit meinem eigenem Code. Und ich kann einfach keinen Fehler
erkennen.
Die SPI Initialisierung ist in beiden Fällen gleich, und der unten
auskommentierte HAL Code kommuniziert einwandfrei. Auch kann ich mir mit
PerPrint die Register ausgeben lassen und auch diese sind gleich
eingestellt.
Bei meinem eigenem Code mache ich folgende Beobachtung:
SPI_SR_TXE ist gesetzt, ich schicke also Daten hin. SPI_SR_RXNE hingegen
wird nie gesetzt und "RX1\r\n" folglich nie ausgegeben. Auch ein am
Ausgabepin angeschlossenes Oszi zeigt keine gesendeten Daten an.
Die Konfigurationsregister der SPI Schnittstelle initialisiere ich mit:
Malte _. schrieb:> Ziel ist hinterher DMA zu verwenden, was leider mit der HAL Lib nicht> funktioniert.
Der funktioniert ziemlich sicher mit der HAL. Habe ich aktuell mit F2,
F3, G4, F4, F7 und H7 in Benutzung.
Hast du alle benötigten Interrupts aktiviert?
Kevin M. schrieb:> Der funktioniert ziemlich sicher mit der HAL. Habe ich aktuell mit F2,> F3, G4, F4, F7 und H7 in Benutzung.
Mein Versuch endete in einer HAL Funktion, die einfach nicht zurück
kehrte. Meine Initialisierung war wie folgt:
Harry L. schrieb:> Du hast das Prinzip der Callbacks in HAL nict verstanden!
Ok, ich hab jetzt DMA am laufen :)
Das Callback funktioniert wie von mir erwartet, was hingegen fehlte war
1
voidDMA1_Channel5_IRQHandler(void)
2
{
3
/* USER CODE BEGIN DMA1_Channel5_IRQn 0 */
4
5
/* USER CODE END DMA1_Channel5_IRQn 0 */
6
HAL_DMA_IRQHandler(&g_hdma_spi2_tx);
7
/* USER CODE BEGIN DMA1_Channel5_IRQn 1 */
8
9
/* USER CODE END DMA1_Channel5_IRQn 1 */
10
}
Den Code hatte ich beim Neugenerieren durch CubeMX übersehen, und so
nicht ins eigene Projekt übernommen.
Es wäre zwecks Erkenntnisgewinn trotzdem schön zu wissen, was bei meinem
eigenem SPI Code falsch ist.
Malte _. schrieb:> Den Code hatte ich beim Neugenerieren durch CubeMX übersehen, und so> nicht ins eigene Projekt übernommen.
Verstehe ich nicht!
Der generierte Code wird doch autom. ins Projekt übernommen...
Nutzt du nicht die CubeIDE oder hast du bei den Einstellungen von CubeMX
was zerrissen?
Wenn das alles korrekt wäre, würde da garantiert nichts fehlen nach dem
Code generieren.
Harry L. schrieb:> Verstehe ich nicht!> Der generierte Code wird doch autom. ins Projekt übernommen...>> Nutzt du nicht die CubeIDE oder hast du bei den Einstellungen von CubeMX> was zerrissen?> Wenn das alles korrekt wäre, würde da garantiert nichts fehlen nach dem> Code generieren.
Naja, aus meiner Sicht generiert CubeMX eher Samplecode. Man hat zwar in
den Quelltexten Stellen um eigenen Code einzufügen, aber wie ich auch
nur eine extra .c Datei oder zusätzliche Include Suchpfade im Cube
hinzufüge habe ich nicht herausgefunden. Stattdessen wird das Makefile
einfach immer überschrieben. Selbiges gilt für Anpassungen im
Linkerskript. Also verwalte ich mein Projekt lieber in einem separatem
Verzeichnis.
Ich hätte die Änderungen natürlich leicht bemerkt, wenn ich das
Ausgabeverzeichnis des CubeMX mit GIT o.ä. getrackt hätte. Dann hätte
ein git diff direkt alle relevanten CubeMX Änderungen aufgelistet.
Malte _. schrieb:> Naja, aus meiner Sicht generiert CubeMX eher Samplecode. Man hat zwar in> den Quelltexten Stellen um eigenen Code einzufügen, aber wie ich auch> nur eine extra .c Datei oder zusätzliche Include Suchpfade im Cube> hinzufüge habe ich nicht herausgefunden. Stattdessen wird das Makefile> einfach immer überschrieben. Selbiges gilt für Anpassungen im> Linkerskript. Also verwalte ich mein Projekt lieber in einem separatem> Verzeichnis.
Vollkommen falsche Vorgehensweise!
Einfach in der IDE im Project-Explorer eine neue C-Datei erzeugen und
fertig.
Alle C-Files in deinem Projekt werden autom. verwendet.
Um das makefile musst du dich überhaupt nicht kümmern.
Und nein!
CubeMX erzeugt keinen "Sample-Code" sondern alles, was du brauchst.
Du solltest dich erstmal mit dem Umgang mit CubeIDE beschäftigen!
STK500-Besitzer schrieb:> Harry L. schrieb:>> Einfach in der IDE im Project-Explorer eine neue C-Datei erzeugen und>> fertig.>> Und selbst da kann man einen Zielordner angeben.
Ja natürlich!
Muß man sogar.
Re-Klick auf den gewünschten Ordner -> New -> Source-File