Hallo,
Ich versuche über ein Nucleo32 Board (STM32G431) per I2C Daten von einem
BNO055 Sensor zu empfangen. Wenn ich mich nicht täusche muss ich doch
dafür einmal HAL_I2C_Master_Transmit ausführen und dabei das Register
mitschicken, welches ich auslesen will, und im Anschluss mit
HAL_I2C_Master_Receive die Daten empfangen. Oder funktioniert das so
nicht?
Im Folgenden ist mein Code in der void main:
1 | HAL_StatusTypeDef ret;
|
2 | uint8_t buf[16];
|
3 | uint8_t output[16];
|
4 |
|
5 | // hier ist bisschen was autogenerated
|
6 |
|
7 | buf[0] = 0x3D; // Register zum Ändern des Operationmodes
|
8 | buf[0] = 0b00001001 >> 8; // Operationmode auf COMPASS stellen
|
9 | ret = HAL_I2C_Master_Transmit(&hi2c1, BNO055_ADDR, buf, 2, HAL_MAX_DELAY);
|
10 | HAL_Delay(10); // es dauert 7ms, den Operationmode von CONFIG auf COMPASS zu stellen
|
11 |
|
12 | while(1) {
|
13 | buf[0] = 0x0E; // Register MAG_DATA_X_LSB
|
14 | ret = HAL_I2C_Master_Transmit(&hi2c1, BNO055_ADDR, buf, 1, HAL_MAX_DELAY);
|
15 | ret = HAL_I2C_Master_Receive(&hi2c1, BNO055_ADDR, output, 1, HAL_MAX_DELAY);
|
16 |
|
17 | sprintf((char*)buf, "%u\r\n", (unsigned int) output[0]);
|
18 | HAL_UART_Transmit(&huart2, buf, strlen((char*)buf), HAL_MAX_DELAY);
|
19 |
|
20 | HAL_Delay(50);
|
21 | }
|
Ich hab mich mit den Registern an das Manual vom BNO055 gehalten.
https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bno055-ds000.pdf#%5B%7B%22num%22%3A149%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C68%2C744%2C0%5D
Alle was übers UART ausgegeben wird ist 0.
Nach den I2C Abfragen hab ich jeweils gecheckt, ob
und falls nicht einen Fehler ausgegeben. Das passt aber scheinbar
immer, also irgendwas kommt wohl zurück.
Leider weiß ich auch nicht, ob mein Fehler im I2C selber liegt, oder ob
ich was wichtiges im Manual überseh und einfach den Sensor falsch bedien
:( Aber vielleicht findet ja wer direkt was.
Ich hoffe mir kann jemand helfen, ich hab leider noch nicht sehr viel
Ahnung..