Hallo, ich habe einen kuriosen Effekt mit einem STM32F7 beim Senden von I2C-Daten per HAL_I2C_Master_Transmit_IT. Wenn das Senden in main.c aufgerufen wird, werden korrekte Daten gesendet. Erfolgt das Senden jedoch in einer Funktion, dann kommen falsche Daten raus. Wenn man dann aber in der Funktion nach dem Senden noch 1 ms wartet, werden korrekte Daten gesendet. Ich habe absolut keine Erklärung dafür. Was könnte der Grund dafür sein? 1 ms warten ist ja nicht im Sinne des interruptgesteuerten Sendens... Gruß Martin
Der Sendebuffer in der Funktion liegt in der Funktion auf dem Stack, bis das senden ausgeführt wird, ist die Funktion schon verlassen und der Stack aufgeräumt, also es werden zufällige Daten gesendet.
Naja, die Frage ist, wo sind deine Daten? Der Sinn der Interrupt-Funktion sollte doch sein (wenn ich mich da jetzt nicht irre), dass du einen Pointer auf deine Daten, sowie eine Anzahl an zu übertragenden Daten übergibst. D.h. du solltest sicherstellen, dass diese Daten auch jederzeit in diesem Speicherbereich liegen. Den Speicherbereich in einer Function zu definieren, zu füllen, den Pointer dahin zu übergeben und dann diese Function zu beenden dürfte problematisch sein. Versuche das selbe mal mit global definierten Variablen in denen du deine zu übermittelnden Daten speicherst und vergleiche das Ergebnis ;-)
Klingt plausibel. Bei anderen Funktionen mit transmit_IT (SPI, UART) habe ich meist globale Variablen verwendet und noch nie Probleme gehabt. Habe es geändert und es funktioniert! Manchmal steht man einfach auf dem Schlauch. Danke für Eure Antworten.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.