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

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