AnsweredAssumed Answered

MPU6050 with STM32F3 reading axes X,Y,Z accelerometer values problems

Question asked by toufik chatour on May 28, 2018

I have an STM32F303 Discovery and I want to use the I2C bus to receive the x,y,z data from an accelerometer MPU6050. Does anyone have source code for this? The problem is that the address of the buffers (i2cBuff) are 0, and the Xaccel, Yaccel, Zaccel too.

Here is my code:


#include "main.h"
#include "stm32f3xx_hal.h"
I2C_HandleTypeDef hi2c1;
#define mpu6050Address 0xD0 
uint8_t i2cBuf[8];
uint16_t ax,ay,az;
float Xaccel,Yaccel,Zaccel;

int main(void)
  //HAL Initialise      
  //Config functions      
  //1. Scan the I2C addresses      
  for(uint8_t i=0; i<255; i++)      
        if(HAL_I2C_IsDeviceReady(&hi2c1, i, 1, 10) == HAL_OK)           
             {   HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);                
//2. I2C Write example      
//a) Set accelerometer range (reg28)      
i2cBuf[0] = 28;            //Register address: Accelerometer config 1      
i2cBuf[1] = 0x08;          //Data to write, +-8g range      
HAL_I2C_Master_Transmit(&hi2c1, mpu6050Address, i2cBuf, 2, 10);

//3. I2C Read example      
//Request to read from a register (reg28)      
i2cBuf[0] = 28;             //Register address: Accelerometer config 1      
HAL_I2C_Master_Transmit(&hi2c1, mpu6050Address, i2cBuf, 1, 10);      
//Read data      
i2cBuf[1] = 0x00;      
HAL_I2C_Master_Receive(&hi2c1, mpu6050Address|0x01, &i2cBuf[1], 1, 10);   

//4. Read accelerometer data     
HAL_I2C_Mem_Read(&hi2c1, mpu6050Address, 0x3B, I2C_MEMADD_SIZE_8BIT, &i2cBuf[1], 6, 10);

                  ax = -(i2cBuf[1]<<8 | i2cBuf[2]);           
                  ay = -(i2cBuf[3]<<8 | i2cBuf[4]);           
                  az =  (i2cBuf[5]<<8 | i2cBuf[6]);            
                  Xaccel = ax/8192.0;           
                  Yaccel = ay/8192.0;           
                  Zaccel = az/8192.0;