Skip to main content
Associate
March 3, 2025
Solved

STM32WB15CC (B-WB1M-WPAN) cannot initilize MotionFx

  • March 3, 2025
  • 2 replies
  • 1175 views

I've been using B-WB1M-WPAN board with a modified example of motion service from BLE_HR_p2p_Sensor. but with IMU readings with a steval-mki217v1 shield connected with SPI.

I already have the CRC checked from CubeMX generation.

 

So far I have been able to read IMU data (polling) and send it through a BLE notifiacation service. but when I try to setup a MotionFx server it mulfunctions.

void ssfusn_setup(void)
{
 /* Check if statically allocated memory size is sufficient to store MotionFX algorithm state and resize if necessary */
 if (STATE_SIZE < MotionFX_GetStateSize())
 {
 // Error_Handler();
 while (1)
 {
 /* code */
 }

 } /* Sensor Fusion API initialization function */

 MotionFX_GetLibVersion(lib_version);
 MotionFX_initialize((MFXState_t *)mfxstate);
 MotionFX_getKnobs(mfxstate, &iKnobs);
 iKnobs.acc_orientation[0] = 's';
 iKnobs.acc_orientation[1] = 'e';
 iKnobs.acc_orientation[2] = 'u';
 iKnobs.gyro_orientation[0] = 's';
 iKnobs.gyro_orientation[1] = 'e';
 iKnobs.gyro_orientation[2] = 'u';
 iKnobs.mag_orientation[0] = 'n';
 iKnobs.mag_orientation[1] = 'e';
 iKnobs.mag_orientation[2] = 'u';

 iKnobs.gbias_acc_th_sc = GBIAS_ACC_TH_SC;
 iKnobs.gbias_gyro_th_sc = GBIAS_GYRO_TH_SC;
 iKnobs.gbias_mag_th_sc = GBIAS_MAG_TH_SC;

 iKnobs.output_type = MFX_ENGINE_OUTPUT_ENU;
 iKnobs.LMode = 1;
 iKnobs.modx = DECIMATION;
 // ____________________________________________________________________________
 MotionFX_setKnobs(mfxstate, &iKnobs);
 MotionFX_enable_6X(mfxstate, MFX_ENGINE_DISABLE);
 MotionFX_enable_9X(mfxstate, MFX_ENGINE_ENABLE); /* Enable 9-axis sensor fusion */
}

 

here are some combinations I've tried. with this line of code above.

1. when initialize after MX_APPE_Init(); in main.c the device will enter a hardfault error in couple of loops. same goes when put on app context init.

2. when initialize before MX_APPE_Init(); it does not process the registered UTIL_SEQ_RegTask. But the device works fine.

When I remove the BLE stack and left with the IMU reading with SPI.

3. when initialize before main loop, The IMU stops returning data.

Best answer by Zefie

Turns out I didn't have enough stack/heap. I bumped those up to 0x1000, it now works.

2 replies

ZefieAuthor
Associate
March 11, 2025

Any update on this ? Am I missing any information?

ZefieAuthorBest answer
Associate
March 21, 2025

Turns out I didn't have enough stack/heap. I bumped those up to 0x1000, it now works.