Forum: Mikrocontroller und Digitale Elektronik STM32 HAL_I2C_Mem_Read_IT


von MTBaddict (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

vielleicht könnt ihr mir ja weiterhelfen.
Die HAL library der STM32 Familie bietet die Möglichkeit direkt in
Register von einem Device z.B. Sensor zu schreiben oder es zu lesen.
Die Funktionen hierfür sind:

HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, 
uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t 
Size);

bzw.

HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, 
uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t 
Size);

Der Date-frame für einen erfolgreich durchgeführten HAL_I2C_Mem_Read_IT 
Befehl ist im Anhang zu sehen.

Mein Problem ist nun, ich habe ein Master-Board welches genau diese 
Befehle verwendet, an diesem Board darf auch nichts verändert werden.
Ich soll nun ein zweites Board als Slave programmieren, welches 
sozusagen einen Sensor simuliert.

Meine Frage ist nun, gibt es eine Möglichkeit im Slave-Board Variablen 
anzulegen, die für den Master wie ein Device Register mit Adresse (z.B 
0x03) wirken ? So dass man den Variablenwert über HAL_I2C_Mem_Write_IT 
bzw. HAL_I2C_Mem_Read_IT verändern kann?

Ich habe es bereits mit Interrupts über die Callback Funktionen 
versucht,
den Schreibvorgang (dort werden 2 byte nacheinander empfangen) mit 
HAL_I2C_Mem_Write_IT bekomme ich so hin, aber der Lesevorgang (dort wird 
erst ein byte empfangen, dannach soll ein byte versand werden) bereitet 
mir schwierigkeiten. Es gibt in der HAL_Libary keine Funkiton für den 
Slave die zuerst ein byte empfängt und anschließend eins verschickt.
Wenn ich ganz simpel
HAL_I2C_Slave_Receive_IT() und anschließend
HAL_I2C_Slave_Transmit_IT() ausführe kommt nichts beim Master-Board an.
Vielen Dank schonmal für Anregungen aller Art.

Gruß

Stefan

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.