STM32 I2C-Kommunikation

Gast #4889710
Lesenswert?
• ▲
▼
Hallo,

ich möchte ein GY-88-Board (MPU6050 + HMC5883 + BMP085) mit einem 
STM32F4 auszulesen.
I2C-Kommunikation funktioniert soweit ganz gut.
Um das Auslesen der drei Sensoren möglichst im Hintergrund laufen zu 
lassen möchte ich folgendes haben.
Bei fertigem Auslesen des einen Sensors soll eine neue Kommunikation 
angestoßen werden, was den nächsten Sensor ausliest usw.
Wie macht man sowas am Besten?
Bzw. ich bräuchte ein Flag o.ä. was das Ende einer I2C-Kommunikation 
anzeigt. Weiß da jemand was?
Gast #4889720
Lesenswert?
• ▲
▼
Hi,
benutzt du die HAL?
Wenn ja, gibt es dort eine Complete Callback-Methode, die signalisiert, 
wann ein Schreib bzw. Lesevorgang beendet ist.
Schau mal hier unter
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

Stichwort:
HAL_I2C_MasterTxCpltCallback oder HAL_I2C_MasterRxCpltCallback (jeweils 
Seite 447)
Gast #4889721
Lesenswert?
• ▲
▼
The Flash schrieb:
> Wie macht man sowas am Besten?
Mit einer State-Machine:
1
switch( state)
2
{
3
  case A:
4
    do_something();
5
    state = wait_for_something;
6
    break:
7
  case wait_for_something:
8
    if (event_occured)
9
    {
10
      state = B;
11
    }
12
    break;
13
  case B:
14
    do_somthing_other();
15
    state = A;
16
    break;
17
}
Gast #4889757
Lesenswert?
• ▲
▼
Danke für die Antworten.
Ich hatte vor eine State-Machine zu verwenden. Die Frage ist nur wo ich 
diese dann aufrufen soll...
Ich nutze die Cube nicht, sondern mach alles direkt mit Registern.
Das mit den Callback-Funktionen ist interessant. Hab im Cube-Code 
gesucht und folgendes gefunden:
1
/**
2
  * @brief  Master Tx Transfer completed callback.
3
  * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains
4
  *                the configuration information for the specified I2C.
5
  * @retval None
6
  */
7
__weak void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c)
8
{
9
  /* Prevent unused argument(s) compilation warning */
10
  UNUSED(hi2c);
11

12
  /* NOTE : This function should not be modified, when the callback is needed,
13
            the HAL_I2C_MasterTxCpltCallback can be implemented in the user file
14
   */
15
}
16

17
/**
18
  * @brief  Master Rx Transfer completed callback.
19
  * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains
20
  *                the configuration information for the specified I2C.
21
  * @retval None
22
  */
23
__weak void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c)
24
{
25
  /* Prevent unused argument(s) compilation warning */
26
  UNUSED(hi2c);
27

28
  /* NOTE : This function should not be modified, when the callback is needed,
29
            the HAL_I2C_MasterRxCpltCallback can be implemented in the user file
30
   */
31
}


Die Frage ist nur wie die sich das nun genau gedacht haben, bzw. ich hab 
gehofft da was zu finden, von welchen Flags und Signalen die ausgehen, 
dass die Kommunikation abgeschlossen ist.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.