STM32L072KZT6: kurioser Effekt mit HAL_I2C_Master_Transmit_IT

OP #6569920
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
Angehängte Dateien:
Gast #6569928
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.
Gast #6569934
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 ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren