STM32 und I2C Transmit/Receive via interrupt

Gast #4605530
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.