2020-11-05 09:59 PM
my mcu is STM32F730R8Tx
sensor: LSM9DS1
use CubeMx gen code, with Makefile(under linux env)
I use lsm9ds1_reg.c as sensor driver fetch raw data, and it worked fine.
then, do the following as MotionFX lib documents:
I can run the code, and i can get ther version code by MotionFX_GetLibVersion(): ST MotionFX v2.4.1
But, if i enable MotionFX_propagate() in the following routie, MCU will enter Hard Falut ISR...
if (is_imu_xl_gy_drdy())
{
MFX_input_t raw;
MFX_output_t out;
imu_getdata(&raw);
// curr_tick = HAL_GetTick();
// deltatime = (curr_tick - last_tick)/1000.0;
// last_tick = curr_tick;
deltatime = 0.01;
if (0)
{
len = snprintf(buf, 256, "%4.2f %4.2f %4.2f | %4.2f %4.2f %4.2f | %4.1f %4.1f %4.1f\n", raw.acc[0], raw.acc[1], raw.acc[2], raw.gyro[0], raw.gyro[1], raw.gyro[2], raw.mag[0], raw.mag[1], raw.mag[2]);
CDC_Transmit_FS(buf, len);
}
MotionFX_propagate(&out, &raw, &deltatime);
}
I have enable CRC in cubemx.
in Makefile, i did some change:
in STM32F730R8Tx_FLASH.ld
=============
But why HardFalut once calling MotionFX_propagate ?
Thank thee very much!!
2020-11-11 11:11 PM
Hi,
i have committed again. please check
Now, the mcu will enter hard fault loop asap power on, but if comment L158( main.c ) which call MotionFX_propagate(), you can see imu raw data via usb cdc port.
here is some samples
[15:09:19:770] 15.74 -860.10 499.47 | -0.00 0.00 0.00 | 236.6 1271.4 -1005.7�?�
[15:09:19:778] 16.10 -860.22 499.47 | 0.00 0.00 -0.00 | 236.6 1271.4 -1005.7�?�
[15:09:19:787] 16.23 -860.10 499.71 | 0.00 -0.00 -0.00 | 237.8 1272.5 -996.4�?�
[15:09:19:795] 16.10 -860.10 499.47 | 0.00 0.00 0.00 | 235.5 1269.0 -1004.6�?�
[15:09:19:804] 16.10 -860.34 499.59 | -0.00 0.00 0.00 | 235.5 1269.0 -1004.6�?�
[15:09:19:813] 15.98 -860.59 499.35 | -0.01 0.00 0.00 | 238.4 1269.6 -1002.2�?�
[15:09:19:821] 15.98 -860.59 499.47 | -0.01 -0.00 0.00 | 240.1 1273.1 -1001.7�?�
[15:09:19:830] 16.10 -860.34 499.35 | 0.00 -0.00 -0.00 | 240.1 1273.1 -1001.7�?�
[15:09:19:838] 16.23 -859.98 499.47 | 0.01 -0.00 -0.01 | 237.8 1273.7 -1003.4�?�
[15:09:19:846] 16.59 -859.73 499.59 | 0.01 -0.00 -0.00 | 237.8 1273.7 -994.1�?�
[15:09:19:855] 16.71 -859.61 499.96 | -0.00 0.00 0.00 | 235.5 1271.4 -994.1�?�
[15:09:19:863] 16.59 -859.73 499.96 | -0.01 0.01 0.01 | 233.2 1273.7 -1009.8�?�
2020-11-12 12:57 AM
Hi @MMa.1893 ,
unfortunately it is still not clear...
If the hard fault happens immediately after reset even before it reach the MotionFX_propagate() function it could be like linker issue.
As a general comment, however, since this code has not been produced by ST, our suggestion is to directly ask to the Github project author…
-Eleon
2020-11-12 12:59 AM
no, no
I mean, hard fault happen as soon as calling MotionFX_propagate().
MotionFX_propagate(&out, &raw, &deltatime); // <<---- mcu enter hard fault, once calling this function!!
Please HELP, all things stuck on the firmware...
2020-11-12 03:06 AM
Hi, Eleon
I found a new situation.
i'm tring to add MotionFX_MagCal_init/ MotionFX_MagCal_run before enter main loop.
but it failed to compile
last message is
arm-none-eabi-gcc build/main.o build/gpio.o build/dac.o build/i2c.o build/spi.o build/stm32f7xx_it.o build/stm32f7xx_hal_msp.o build/usb_device.o build/usbd_desc.o build/usbd_cdc_if.o build/usbd_conf.o build/stm32f7xx_hal_pcd.o build/stm32f7xx_hal_pcd_ex.o build/stm32f7xx_ll_usb.o build/stm32f7xx_hal_rcc.o build/stm32f7xx_hal_rcc_ex.o build/stm32f7xx_hal_flash.o build/stm32f7xx_hal_flash_ex.o build/stm32f7xx_hal_gpio.o build/stm32f7xx_hal_dma.o build/stm32f7xx_hal_dma_ex.o build/stm32f7xx_hal_pwr.o build/stm32f7xx_hal_pwr_ex.o build/stm32f7xx_hal_cortex.o build/stm32f7xx_hal.o build/stm32f7xx_hal_i2c.o build/stm32f7xx_hal_i2c_ex.o build/stm32f7xx_hal_exti.o build/stm32f7xx_ll_rcc.o build/stm32f7xx_ll_utils.o build/stm32f7xx_ll_exti.o build/stm32f7xx_ll_dac.o build/stm32f7xx_ll_gpio.o build/stm32f7xx_ll_dma.o build/stm32f7xx_hal_spi.o build/stm32f7xx_hal_spi_ex.o build/stm32f7xx_hal_tim.o build/stm32f7xx_hal_tim_ex.o build/system_stm32f7xx.o build/usbd_core.o build/usbd_ctlreq.o build/usbd_ioreq.o build/usbd_cdc.o build/cmd_proc.o build/adns3080.o build/dwt_delay.o build/imu.o build/lsm9ds1_reg.o build/rtc.o build/stm32f7xx_hal_rtc.o build/stm32f7xx_hal_rtc_ex.o build/crc.o build/stm32f7xx_hal_crc.o build/stm32f7xx_hal_crc_ex.o build/startup_stm32f730xx.o -mcpu=cortex-m7 -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=softfp -specs=nano.specs -lc -TSTM32F730R8Tx_FLASH.ld -LMiddlewares/ST/STM32_MotionFX_Library/Lib -lc -lnosys -l:MotionFX_CM7F_wc32_ot.a -lm -Wl,-Map=build/odom_board.map,--cref -Wl,--gc-sections -o build/odom_board.elf
/opt/gcc-arm-none-eabi-8-2018-q4-major/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/bin/ld: Middlewares/ST/STM32_MotionFX_Library/Lib/MotionFX_CM7F_wc32_ot.a(motion_fx.o): in function `MEMSloadFromNVM.isra.10':
motion_fx.c:(.text.MEMSloadFromNVM.isra.10+0x0): undefined reference to `MotionFX_LoadMagCalFromNVM'
/opt/gcc-arm-none-eabi-8-2018-q4-major/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/bin/ld: Middlewares/ST/STM32_MotionFX_Library/Lib/MotionFX_CM7F_wc32_ot.a(motion_fx.o): in function `MEMSsaveInNVM.isra.11':
motion_fx.c:(.text.MEMSsaveInNVM.isra.11+0x0): undefined reference to `MotionFX_SaveMagCalInNVM'
collect2: error: ld returned 1 exit status
make: *** [Makefile:215: build/odom_board.elf] Error 1
Is this related to my previous problem?
any other lib should i link to proj besides "MotionFX_CM7F_wc32_ot.o" ??
2020-11-12 07:12 AM
Please add following functions. They can be used to save and load magnetometer calibration coefficients.
/**
* @brief Load calibration parameter from memory
* @param dataSize length ot the data
* @param data pointer to the data
* @retval (1) fail, (0) success
*/
char MotionFX_LoadMagCalFromNVM(unsigned short int dataSize, unsigned int *data)
{
return (char)1;
}
/**
* @brief Save calibration parameter to memory
* @param dataSize length ot the data
* @param data pointer to the data
* @retval (1) fail, (0) success
*/
char MotionFX_SaveMagCalInNVM(unsigned short int dataSize, unsigned int *data)
{
return (char)1;
}
2020-11-12 11:50 PM
Hi, Miroslav
Thank you for reply.
add those two function, compile ok.
But when i use such test routie, cal_quality always return Zero(0)
if (1)
{
MotionFX_initialize();
MFX_knobs_t knobs;
MotionFX_getKnobs(&knobs);
// tunning parameters
knobs.LMode = 1;
knobs.modx = 1;
knobs.output_type = MFX_ENGINE_OUTPUT_ENU;
// tunning parameters
MotionFX_setKnobs(&knobs);
// MotionFX_enable_6X(MFX_ENGINE_DISABLE);
MotionFX_enable_9X(MFX_ENGINE_ENABLE);
}
if (1)
{
MFX_MagCal_output_t magcal_out;
MFX_MagCal_input_t magcal_in;
MotionFX_MagCal_init(25, 1);
uint8_t buf[64];
int len;
CDC_Transmit_FS("mag cal..\n", 10);
for (;;)
{
lsm9ds1_status_t status;
axis3bit16_t data_raw_mag;
// lsm9ds1_dev_status_get(&dev_mag, &dev_imu, &status);
// if (status.status_mag.zyxda)
while (!is_imu_xl_gy_drdy())
{
}
lsm9ds1_acceleration_raw_get(&dev_imu, data_raw_mag.u8bit);
lsm9ds1_angular_rate_raw_get(&dev_imu, data_raw_mag.u8bit);
lsm9ds1_magnetic_raw_get(&dev_imu, data_raw_mag.u8bit);
lsm9ds1_dev_status_get(&dev_mag, &dev_imu, &status);
if (status.status_mag.zyxda)
{
// lsm9ds1_magnetic_raw_get(&dev_imu, data_raw_mag.u8bit);
len = snprintf(buf, 64, "%d, %d, %d\n", data_raw_mag.i16bit[0], data_raw_mag.i16bit[1], data_raw_mag.i16bit[2]);
CDC_Transmit_FS(buf, len);
}
else
{
continue;
}
magcal_in.mag[0] = lsm9ds1_from_fs16gauss_to_mG(data_raw_mag.i16bit[0]);
magcal_in.mag[1] = lsm9ds1_from_fs16gauss_to_mG(data_raw_mag.i16bit[1]);
magcal_in.mag[2] = lsm9ds1_from_fs16gauss_to_mG(data_raw_mag.i16bit[2]);
magcal_in.time_stamp = 25;
MotionFX_MagCal_run(&magcal_in);
MotionFX_MagCal_getParams(&magcal_out);
len = snprintf(buf, 64, "cal_q -> %d\n", magcal_out.cal_quality);
CDC_Transmit_FS(buf, len);
}
}
==================================
And if i comment those MagCal routie, use raw sensor data as input of MotionFX_propagate
Code will enter HardFault loop...how to debug this?
2020-11-15 10:31 PM
any more update?
2020-11-16 07:52 PM
any update ....
2020-11-17 01:36 AM
i use other version lib which is "ST MotionFX v2.4.0"
the same problem.... once call MotionFX_propagate, enter hard fault loop....
2020-11-17 09:07 AM
Hi @MMa.1893 ,
Miroslav is currently away.
Please be patient, we'll update you as soon as possible 😉
-Eleon