Skip to main content
Explorer
January 22, 2023
Question

ASM330LHHX stops transmitting after some time.

  • January 22, 2023
  • 2 replies
  • 1059 views

I am using Nucleo F767ZI with SPI interface to ASM330LHHX sensor.

I am using example code from https://github.com/STMicroelectronics/STMems_Standard_C_drivers/blob/master/asm330lhhx_STdC/examples/asm330lhhx_read_data_polling.c

After a couple of seconds "asm330lhhx_xl_flag_data_ready_get" allways returns 0.

After power off and power on I get a couple of readings but then again nothing.

What am I doing wrong?

/* Initialize all configured peripherals */
 MX_GPIO_Init();
 MX_USART3_UART_Init();
 MX_SPI4_Init();
 /* USER CODE BEGIN 2 */
 
 platform_init();
 platform_delay(BOOT_TIME);
 
 do{
 	asm330lhhx_device_id_get(&dev_ctx, &whoamI);
 	HAL_Delay(1);
 }while(whoamI != ASM330LHHX_ID);
 
 /* Restore default configuration */
 asm330lhhx_reset_set(&dev_ctx, PROPERTY_ENABLE);
 do {
 asm330lhhx_reset_get(&dev_ctx, &rst);
 } while (rst);
 
 /* Disable I3C interface */
 asm330lhhx_i3c_disable_set(&dev_ctx, ASM330LHHX_I3C_DISABLE);
 asm330lhhx_i2c_interface_set(&dev_ctx, ASM330LHHX_I2C_DISABLE);
 /* Enable Block Data Update */
 asm330lhhx_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
 /* Set Output Data Rate */
 asm330lhhx_xl_data_rate_set(&dev_ctx, ASM330LHHX_XL_ODR_833Hz);
 asm330lhhx_gy_data_rate_set(&dev_ctx, ASM330LHHX_GY_ODR_833Hz);
 /* Set full scale */
 asm330lhhx_xl_full_scale_set(&dev_ctx, ASM330LHHX_2g);
 asm330lhhx_gy_full_scale_set(&dev_ctx, ASM330LHHX_2000dps);
 
 asm330lhhx_xl_hp_path_on_out_set(&dev_ctx, ASM330LHHX_LP_ODR_DIV_100);
 asm330lhhx_xl_filter_lp2_set(&dev_ctx, PROPERTY_ENABLE);
 
 /* USER CODE END 2 */
 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
 while (1)
 {
 /* USER CODE END WHILE */
 
 /* USER CODE BEGIN 3 */
 
	 uint8_t reg;
 
	 /* Read output only if new xl value is available */
	 asm330lhhx_xl_flag_data_ready_get(&dev_ctx, &reg);
	 if (reg)
	 {
		/* Read acceleration field data */
		memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
		asm330lhhx_acceleration_raw_get(&dev_ctx, data_raw_acceleration);
		acceleration_mg[0] = asm330lhhx_from_fs2g_to_mg(data_raw_acceleration[0]);
		acceleration_mg[1] = asm330lhhx_from_fs2g_to_mg(data_raw_acceleration[1]);
		acceleration_mg[2] = asm330lhhx_from_fs2g_to_mg(data_raw_acceleration[2]);
 
		HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
	 }
 
	 asm330lhhx_gy_flag_data_ready_get(&dev_ctx, &reg);
	 if (reg)
	 {
	 /* Read angular rate field data */
	 memset(data_raw_angular_rate, 0x00, 3 * sizeof(int16_t));
	 asm330lhhx_angular_rate_raw_get(&dev_ctx, data_raw_angular_rate);
	 angular_rate_mdps[0] =asm330lhhx_from_fs2000dps_to_mdps(data_raw_angular_rate[0]);
	 angular_rate_mdps[1] =
	 asm330lhhx_from_fs2000dps_to_mdps(data_raw_angular_rate[1]);
	 angular_rate_mdps[2] =
	 asm330lhhx_from_fs2000dps_to_mdps(data_raw_angular_rate[2]);
	 HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
	 }
 
	 asm330lhhx_temp_flag_data_ready_get(&dev_ctx, &reg);
	 if (reg)
	 {
	 /* Read temperature data */
	 memset(&data_raw_temperature, 0x00, sizeof(int16_t));
	 asm330lhhx_temperature_raw_get(&dev_ctx, &data_raw_temperature);
	 temperature_degC = asm330lhhx_from_lsb_to_celsius(data_raw_temperature);
 
	 }
	 HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin);
	 HAL_Delay(100);
 }

    This topic has been closed for replies.

    2 replies

    Technical Moderator
    April 12, 2023

    Hi @MAnto.2​ ,

    Are you confident about the stability of Vdd and Vddio?

    Visitor II
    March 21, 2024

    Hi,

    I have the same problem. Do you find a solution ?

    Thanks in advance for your help...