Forum: Mikrocontroller und Digitale Elektronik STM32 und I2C Transmit/Receive via interrupt


von Georg M. (Gast)


Lesenswert?

Hallo,

ich habe hier ein Board mit einem Sensor, der über I2C läuft.

Ich habe auf dem Board einen STM32F410RBT**

Und ich nutze die HAL Driver siehe folgendes Manual:

http://www.st.com/content/ccc/resource/technical/document/user_manual/2f/71/ba/b8/75/54/47/cf/DM00105879.pdf/files/DM00105879.pdf/jcr:content/translations/en.DM00105879.pdf

auf

Seite 440 ff

sind folgende Funktionen:

um Werte von meinen Sensor abzfragen muss ich immer erst Senden, dann
den Wert auslesen, also
immer einmal
Transmit, dann
Receive

Das kann ich mit den Polling Funktionen so machen -->

erst
HAL_I2C_Master_Transmit
dann
HAL_I2C_Master_Receive
aufrufen

die Daten sind dann im "Datenpointer" (also an der Stelle, auf die der 
übergebene Pointer zeigt)


Das läuft soweit ganz dufte!!!!


jetzt möchte ich das mit den Interrupt-Funktionen machen, um während
auf die Antwort vom I2C Sensor gewartet wird, etwas anders machen zu 
können!

dann rufe ich zunächst diese hier auf:

HAL_I2C_Master_Transmit_IT

dann diese
HAL_I2C_Master_Receive_IT

"HAL_I2C_Master_Transmit_IT"
löst wenn Daten gesendet sind folgende
ISR aus:
HAL_I2C_MasterTxCpltCallback()


"HAL_I2C_Master_Receive_IT"
löst wenn Daten empfangen sind folgende
ISR aus:
HAL_I2C_MasterRxCpltCallback()



jetzt muss ich doch Transmit und Receive "irgendwie" gegeneinander 
"blocken"?

z.B. nicht Receive bevor nicht Transmit fertig ist o.ä.
und nicht bevor die Daten nicht tatsächlich gesendet bzw. empfangen 
wurden!


Ich kann das noch weiter ausführen und habe da auch schon allerhand 
"Code" fabriziert!
Doch mittlerweile bin ich mir nicht mehr so sicher, ob ich die 
Verwendung der I2C Interrupt-Funktionen richtig verstanden hab!


Also Ist der Ansatz so richtig?
Vorschläge zur Anwendung?
Minimalbeispiel?

GVG

Schorsch

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.