Forum: Mikrocontroller und Digitale Elektronik STM32L072KZT6: kurioser Effekt mit HAL_I2C_Master_Transmit_IT


von Martin R. (mme)


Angehängte Dateien:

Lesenswert?

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

von Johannes S. (Gast)


Lesenswert?

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.

von Erwin (Gast)


Lesenswert?

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 ;-)

von Martin R. (mme)


Lesenswert?

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
Noch kein Account? Hier anmelden.