Forum: Mikrocontroller und Digitale Elektronik I2C STM32 HAL


von STM32 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich steh gerade etwas auf dem Schlauch.

Möchte eigentlich nur einen einfachen I2C Sensor anschließen und ein 
Register auslesen.

Nach Datenblatt also einmal die Adresse des Device auf den BUS mir R/W=0 
, danach die Adresse des Registers gefolgt von einem Repeated Start und 
der Device-Adresse mit R/W=1.

Nun nutze ich die STM32 HAL-Bibliothek und habe dort die Funktionen
1
HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
2
3
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
4
5
und alternativ evtl.:
6
7
HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)

Wie nutze ich die Dinger jetzt richtig?

Die Device-Adresse ist: 0xAA
Das aus zu lesende Register im Device ist: 0XBB


Mir ist nicht klar, wie ich die Funtkionen nutze, um den repeated Start 
hin zu bekommen...
Bin dankbar für etwas Unterstützung

von Mampf (Gast)


Lesenswert?

Master transmit die Adresse des registers, danach ein Master-receive 
würde ich meinen... zumindest ging es bei einem TOF sensor so

von Mampf (Gast)


Lesenswert?

Das mater-transmit macht einen stop, vlt stört er nicht^^ probiert das 
mal aus :)

von Jim M. (turboj)


Lesenswert?

STM32 schrieb im Beitrag #5988490:
> Mir ist nicht klar, wie ich die Funtkionen nutze, um den repeated Start
> hin zu bekommen...

HAL_I2C_Mem_Read() müsste genau den Fall abdecken. MemAddSize ist 1 
(Byte), und MemAddress ist Deine Register Adresse (0xBB).

von Klaus (Gast)


Lesenswert?

STM32 schrieb im Beitrag #5988490:
> danach die Adresse des Registers gefolgt von einem Repeated Start

Solange man kein Multimaster System hat ist Repeated Start äquivalent zu 
STOP und danach START.

MfG Klaus

Beitrag #5988667 wurde vom Autor gelöscht.
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

STM32 schrieb im Beitrag #5988490:
> Mir ist nicht klar, wie ich die Funtkionen nutze, um den repeated Start
> hin zu bekommen...

 Wie dir Jim M. bereits schrieb:
> HAL_I2C_Mem_Read() müsste genau den Fall abdecken.

 HAL_I2C_Mem_Read
1
 performs a I2C write operation to select the memory address to read and then reads N bytes.
2
 (START, I2C_Addr+Write, Memory address, repeated start, I2C_Address+Read, N bytes, STOP)

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.
Lade...