Forum: Mikrocontroller und Digitale Elektronik STM32 HAL I2C Driver nur MSB empfangen


von "S"ehr "T"oller" "M"icrocontroller (Gast)


Lesenswert?

Hallo,

ich habe einen Sensor mit I2C Schnittstelle

http://www.ti.com/lit/ds/symlink/hdc1050.pdf

Ich nutzen einen STM32F410 Controller und habe die I2C-Initialisierung

via STM32CubeMX vorgenommen!

nun möchte ich von den Sensor lesen!

dazu nutze ich die folgenden von der HAL-lib zur Verfügung gestellten
Funktionen.
-->
HAL_I2C_Master_Transmit(&hi2c2, (uint16_t)I2C_adr<<1, &Send_buf, 
(uint16_t)8, (uint32_t)1000);

HAL_I2C_Master_Receive(&hi2c2, (uint16_t)I2C_adr<<1, &Receive_buf, 
(uint16_t)8, (uint32_t)1000);

Die Adresse des Sensors ist 0b1000000. Und wenn ich das Pointerregister
auf 0xFE (siehe Seite 14) beschreibe, erhalte ich immer den Wert "84" 
(dezimal) als 0x54!!!! das entspricht ziemlich genau dem MSB von der 
Manufacturer ID

setze ich das Pointerregister auf 0xFF, lese ich den Wert 16 (dezimal), 
also  0x10 auch wieder nur das MSB!


Die Datenzeiger der beiden HAL Funktionen sind ja nur 8bit lang!!! 
"*pData"......
kann ich das LSB dann so nicht auslesen und muss mir die HAL Funktionen 
selbst umschreiben?

sorry stehen ziemlich auf'm Schlauch!


VG

von Harry L. (mysth)


Lesenswert?

"S"ehr "T"oller" "M"icrocontroller schrieb:
> Die Datenzeiger der beiden HAL Funktionen sind ja nur 8bit lang!!!

Es gibt keine 8bit-Pointer!
Der Pointer zeigt allerdings auf 8bit-Variablen

"S"ehr "T"oller" "M"icrocontroller schrieb:
> (uint16_t)I2C_adr<<1,

Was soll das?
Die I2C-Adresse ist (inkl. R/W-Bit) 8bit lang und nicht 16!

von "S"ehr "T"oller" "M"icrocontroller (Gast)


Lesenswert?

Harry L. schrieb:
> Was soll das?
> Die I2C-Adresse ist (inkl. R/W-Bit) 8bit lang und nicht 16!

Ich weiß auch nicht, warum die Funktionen so implementiert wurden?

Ich hatte auch erwartet:

7bit Adresse + R/W-bit  gefolgt vom Pointergister (auch 8Bit) dann 16 
Bit Daten  !!!

von "S"ehr "T"oller" "M"icrocontroller (Gast)


Lesenswert?

Jo der liest definitiv nur 1Byte an Daten!

Also es scheint mir nicht die vollständige Implementierung

von

http://www.socialledge.com/sjsu/index.php?title=Embedded_System_I2C_Tutorial


zu sein!

Es liegen definitv alle Daten auf dem Bus... die schau ich mir auf dem 
Oszi an?

welchen Vorteil bittet denn so eine HAL Library, wenn doch nicht 
drumherum komme, das teilweise doch noch selbst zu machen?

oder hab ich die Aufgabe der Funktionen
"HAL_I2C_Master_Receive" und
HAL_I2C_Master_Transmit"

falsch verstanden?


VG

von "S"ehr "T"oller" "M"icrocontroller (Gast)


Lesenswert?

so hab mein "dämliches" Problem gefunden!!!!


--> uint8_t  *pData     ist natürlich ein 8Bit-Pointer!!!!!

aber der darf natürlich auch auf z.B. die Adresse einer z.B. uint32_t
Variablen zeigen!!!!!
ok also keine neue Implementierung ;)

VG

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.