Forum: Mikrocontroller und Digitale Elektronik STM32 I2C-Kommunikation


von The Flash (Gast)


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?

von hp-freund (Gast)


Lesenswert?

Genau dazu sind die diversen Ready, EOC und Int Pins am Board gedacht.
Wenn die Sensoren richtig konfiguriert sind erübrigt sich die Frage.

von dyne (Gast)


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)

von Erdoan (Gast)


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
}

von The Flash (Gast)


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.

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.