We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi, I using the Keil RTOS with STM32F4 uC, I want to communicate with MPU-9250 via I2C. I build the project, I connected the two panels together but when I want to send something, I get HAL_ERROR . I did a default i2c initialisation via CubeMX. Then:
/* Private variables ---------------------------------------------------------*/ #define MPU9250_ADDRESS 0x68 #define MAG_ADDRESS 0x0C #define GYRO_FULL_SCALE_250_DPS 0x00 #define GYRO_FULL_SCALE_500_DPS 0x08 #define GYRO_FULL_SCALE_1000_DPS 0x10 #define GYRO_FULL_SCALE_2000_DPS 0x18 #define ACC_FULL_SCALE_2_G 0x00 #define ACC_FULL_SCALE_4_G 0x08 #define ACC_FULL_SCALE_8_G 0x10 #define ACC_FULL_SCALE_16_G 0x18
in main:
[some inits and other stuff...] // Set the device's registers (i.e. 0x19 (hex int value) register) to a value. HAL_I2C_Mem_Write(&hi2c1, MPU9250_ADDRESS, 0x19, 1, (uint8_t *)0x07, 1, 100); HAL_I2C_Mem_Write(&hi2c1, MPU9250_ADDRESS, 0x1A, 1, (uint8_t *)0x00, 1, 100); HAL_I2C_Mem_Write(&hi2c1, MPU9250_ADDRESS, 0x1B, 1, (uint8_t *)GYRO_FULL_SCALE_2000_DPS, 1, 100); HAL_I2C_Mem_Write(&hi2c1, MPU9250_ADDRESS, 0x1C, 1, (uint8_t *)ACC_FULL_SCALE_16_G, 1, 100); HAL_I2C_Mem_Write(&hi2c1, MPU9250_ADDRESS, 0x6B, 1, (uint8_t *)0x00, 1, 100); HAL_I2C_Mem_Write(&hi2c1, MPU9250_ADDRESS, 0x37, 1, (uint8_t *)0x02, 1, 100); HAL_I2C_Mem_Write(&hi2c1, MAG_ADDRESS, 0x0A, 1, (uint8_t *)0x01, 1, 100); uint8_t Buf[14]; //Read Accelometer and Gyroscope from started a specified register (0x3B). HAL_I2C_Mem_Read(&hi2c1, MPU9250_ADDRESS, 0x3B, 1, Buf, 14, 100); [do stuf with accelo and gyro data...] uint8_t ST1; do { //Read magnet sensor ready byte. HAL_I2C_Mem_Read(&hi2c1, MAG_ADDRESS, 0x02, 1, &ST1, 1, 1000); } while (!(ST1&0x01)); uint8_t Mag[7]; //Read magnet sensor data. HAL_I2C_Mem_Read(&hi2c1, MAG_ADDRESS, 0x03, 1, Mag, 7, 100); [do stuf with magnet sensor data...]
I get HAL_ERROR at the first HAL_I2C_Mem_Write (and then at the others too). What am I doing wrong? How can I communicate with I2C? (set and read registers from a device?)
I Have same issue. Please, respond me if you already know how to solve this problem.