# DMP-ICM20948 ```c // app.cpp extern SPI_HandleTypeDef hspi1; void app(){ DMP_ICM20948 icm; DMP_ICM20948Settings icmSettings = { .i2c_speed = 400000, // i2c clock speed .is_SPI = false, // Enable SPI, if disable use i2c .cs_pin = 10, // SPI chip select pin .spi_speed = 7000000, // SPI clock speed in Hz, max speed is 7MHz .mode = 1, // 0 = low power mode, 1 = high performance mode .enable_gyroscope = true, // Enables gyroscope output .enable_accelerometer = true, // Enables accelerometer output .enable_magnetometer = true, // Enables magnetometer output // Enables quaternion output .enable_gravity = true, // Enables gravity vector output .enable_linearAcceleration = true, // Enables linear acceleration output .enable_quaternion6 = true, // Enables quaternion 6DOF output .enable_quaternion9 = true, // Enables quaternion 9DOF output .enable_har = true, // Enables activity recognition .enable_steps = true, // Enables step counter .gyroscope_frequency = 1, // Max frequency = 225, min frequency = 1 .accelerometer_frequency = 1, // Max frequency = 225, min frequency = 1 .magnetometer_frequency = 1, // Max frequency = 70, min frequency = 1 .gravity_frequency = 1, // Max frequency = 225, min frequency = 1 .linearAcceleration_frequency = 1, // Max frequency = 225, min frequency = 1 .quaternion6_frequency = 50, // Max frequency = 225, min frequency = 50 .quaternion9_frequency = 50, // Max frequency = 225, min frequency = 50 .har_frequency = 50, // Max frequency = 225, min frequency = 50 .steps_frequency = 50 // Max frequency = 225, min frequency = 50 }; icm.init(icmSettings); while(1){ icm.task(); //run_icm20948_accel_controller(); //run_icm20948_gyro_controller(); //run_icm20948_mag_controller(); //run_icm20948_linearAccel_controller(); //run_icm20948_grav_controller(); run_icm20948_quat6_controller(&icm, true); //run_icm20948_quat9_controller(true); //run_icm20948_har_controller(); //run_icm20948_steps_controller(); HAL_Delay(100); } } void run_icm20948_quat6_controller(DMP_ICM20948 *icm20948, uint8_t inEuler) { float quat_w, quat_x, quat_y, quat_z; float roll, pitch, yaw; //char sensor_string_buff[128]; if (inEuler) { if (icm20948->euler6DataIsReady()) { icm20948->readEuler6Data(&roll, &pitch, &yaw); //sprintf(sensor_string_buff, "Euler6 roll, pitch, yaw(deg): [%f,%f,%f]", roll, pitch, yaw); //Serial.println(sensor_string_buff); } } else { if (icm20948->quat6DataIsReady()) { icm20948->readQuat6Data(&quat_w, &quat_x, &quat_y, &quat_z); //sprintf(sensor_string_buff, "Quat6 w, x, y, z (deg): [%f,%f,%f,%f]", quat_w, quat_x, quat_y, quat_z); //Serial.println(sensor_string_buff); } } } ```