Tengo un código en Arduino para leer los datos de MPU9255 sin bibliotecas, usándolo directamente a través de I2C. Estoy tratando de hacer lo mismo en Keil uVision con Bluepill, solo para aprender a usar I2C con los controladores HAL.
No sé qué estoy haciendo mal, aquí está el código:
uint8_t adressMPU = 0x68;
uint8_t i2cData;
uint8_t* receive_buffer = 0;
i2cData = 0x6B;
HAL_I2C_Master_Transmit(&hi2c1, adressMPU, &i2cData, 1, 100 ); //Starts MPU
HAL_I2C_Master_Transmit(&hi2c1, adressMPU, 0, 1, 100 );
while (1)
{
i2cData = 0x43; //adress of the register to read Accelerometer x axis
HAL_I2C_Master_Transmit(&hi2c1, adressMPU, &i2cData, 1, 100 ); //set the register address
HAL_I2C_Master_Receive(&hi2c1, adressMPU, receive_buffer, 2, 100); request 2 bytes from the register
HAL_UART_Transmit(&huart1,receive_buffer,sizeof(receive_buffer),100); // send it to serial port
HAL_Delay(500);
}
Mi código en Arduino que está funcionando:
Wire.begin(); //inicia I2C
Wire.beginTransmission(MPU); //Inicia transmissão para o endereço do MPU
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
Wire.beginTransmission(MPU); //transmite
Wire.write(0x43); // Endereço registrador do Gyro
Wire.endTransmission(false); //Finaliza transmissão
Wire.requestFrom(MPU,6,true); //requisita 6 bytes
mediaGyroX += Wire.read()<<8|Wire.read(); //GYRO EIXO X
Seguramente estoy haciendo algo mal, pero no puedo ver el error. ¿Puede alguien ayudarme?