Hallo,
ich programmiere gerade die I2C-Schnittstelle (Controller = STM32L476RG)
zum HTU21D Sensor. Als IDE verwende ich Atollic Truestudio.
Mit dem folgenden Codeschnippsel frage ich die Adresse (sollte lt.
Datenblatt eigentlich 0x40 sein) ab.
Für die Abfrage verwende ich eine HAL-Funktion und übergebe als
Parameter i für die Adresse. Die Variable i ist global und beginnt bei
0:
1 | /**
|
2 | * @brief Checks if target device is ready for communication.
|
3 | * @note This function is used with Memory devices
|
4 | * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains the configuration information for the specified I2C.
|
5 | * @param DevAddress Target device address: The device 7 bits address value in datasheet must be shifted to the left before calling the interface
|
6 | * @param Trials Number of trials
|
7 | * @param Timeout Timeout duration
|
8 | * @retval HAL status
|
9 | */
|
10 | for (; i<255; i++)
|
11 | {
|
12 | if(HAL_I2C_IsDeviceReady(&hi2c1, i, 1, 10) == HAL_OK)
|
13 | {
|
14 | HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
|
15 | break;
|
16 | }
|
17 | }
|
Das seltsame dabei ist, dass HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); nie
ausgeführt wird (Das Programm bleibt hier auch bei einem Breakpoint
nicht stehen). Die Abfrage wird aber bei i=128 (0x80) beendet.