2025-03-09 6:09 AM - edited 2025-03-09 6:31 AM
Hello ST Friends,
Here we are using H3LIS331DL in our product, using SPI interface. Below is the schematic.
and related code is below.
/* Check device ID */
static uint8_t whoamI, tData;
whoamI = 0;
h3lis331dl_device_id_get(&dev_ctx_xl, &whoamI);
user_printf("\r\nh3lis331dl whoamI: 0x%x\r\n", whoamI);
//REG1
tData = 0x27; //0010 0111
nrf_H3LIS331DL_write_reg(H3LIS331DL_CTRL_REG1, &tData, 1);
//REG2
tData = 0x00; //0000 0000
nrf_H3LIS331DL_write_reg(H3LIS331DL_CTRL_REG2, &tData, 1);
//REG3
tData = 0x92; //1001 0010
nrf_H3LIS331DL_write_reg(H3LIS331DL_CTRL_REG3, &tData, 1);
//REG4
tData = 0x80; //1000 0000
nrf_H3LIS331DL_write_reg(H3LIS331DL_CTRL_REG4, &tData, 1);
nrf_H3LIS331DL_read_reg(H3LIS331DL_CTRL_REG1, &tData, 1);
user_printf("REG1: 0x%x\r\n", tData);
nrf_H3LIS331DL_read_reg(H3LIS331DL_CTRL_REG2, &tData, 1);
user_printf("REG2: 0x%x\r\n", tData);
nrf_H3LIS331DL_read_reg(H3LIS331DL_CTRL_REG3, &tData, 1);
user_printf("REG3: 0x%x\r\n", tData);
nrf_H3LIS331DL_read_reg(H3LIS331DL_CTRL_REG4, &tData, 1);
user_printf("REG4: 0x%x\r\n", tData);
nrf_H3LIS331DL_read_reg(H3LIS331DL_CTRL_REG5, &tData, 1);
user_printf("REG5: 0x%x\r\n", tData);
nrf_H3LIS331DL_read_reg(H3LIS331DL_REFERENCE, &tData, 1);
user_printf("REFERENCE: 0x%x\r\n", tData);
nrf_H3LIS331DL_read_reg(H3LIS331DL_INT1_CFG, &tData, 1);
user_printf("INT1_CFG: 0x%x\r\n", tData);
nrf_H3LIS331DL_read_reg(H3LIS331DL_INT1_SRC, &tData, 1);
user_printf("INT1_SRC: 0x%x\r\n", tData);
nrf_H3LIS331DL_read_reg(H3LIS331DL_INT1_THS, &tData, 1);
user_printf("INT1_THS: 0x%x\r\n", tData);
nrf_H3LIS331DL_read_reg(H3LIS331DL_INT1_DURATION, &tData, 1);
user_printf("INT1_DURATION: 0x%x\r\n", tData);
HAL_Delay(200);
static uint8_t tx_buffer[64];
while(1)
{
if(nrf_gpio_pin_read(PIN_H3LIS331_SensorINT1)== 0)
{
h3lis331dl_acceleration_raw_get(&dev_ctx_xl, gH3LIS331_Acc);
user_printf("ACC Raw: %d, %d, %d\r\n", gH3LIS331_Acc[0],gH3LIS331_Acc[1],gH3LIS331_Acc[2]);
snprintf((char *)tx_buffer, sizeof(tx_buffer),"Acceleration [mg]:%5.2f\t%5.2f\t%5.2f\r\n", h3lis331dl_from_fs100_to_mg(gH3LIS331_Acc[0]), h3lis331dl_from_fs100_to_mg(gH3LIS331_Acc[1]), h3lis331dl_from_fs100_to_mg(gH3LIS331_Acc[2]));
user_printf("ACC: %s\r\n", tx_buffer);
}
and below is the UART output, seems the register are all configured successfully.
<info> app: SPI2 example started.
h3lis331dl whoamI: 0x32
REG1: 0x27
REG2: 0x0
REG3: 0x92
REG4: 0x80
REG5: 0x0
REFERENCE: 0x0
INT1_CFG: 0x0
INT1_SRC: 0x0
INT1_THS: 0x0
INT1_DURATION: 0x0
ACC Raw: 64, -48, 1008
ACC: Acceleration [mg]:196.00 -147.00 3087.00
ACC Raw: 16, -32, 928
ACC: Acceleration [mg]:49.00 -98.00 2842.00
ACC Raw: -16, -32, 912
ACC: Acceleration [mg]:-49.00 -98.00 2793.00
ACC Raw: 32, -48, 880
ACC: Acceleration [mg]:98.00 -147.00 2695.00
ACC Raw: 48, -48, 928
ACC: Acceleration [mg]:147.00 -147.00 2842.00
ACC Raw: 32, -32, 912
ACC: Acceleration [mg]:98.00 -98.00 2793.00
ACC Raw: 32, -32, 928
ACC: Acceleration [mg]:98.00 -98.00 2842.00
ACC Raw: 32, -64, 912
ACC: Acceleration [mg]:98.00 -196.00 2793.00
ACC Raw: 32, -64, 944
ACC: Acceleration [mg]:98.00 -196.00 2891.00
ACC Raw: 32, -32, 912
ACC: Acceleration [mg]:98.00 -98.00 2793.00
ACC Raw: 32, -32, 864
ACC: Acceleration [mg]:98.00 -98.00 2646.00
ACC Raw: -16, -16, 880
ACC: Acceleration [mg]:-49.00 -49.00 2695.00
ACC Raw: -16, -32, 928
ACC: Acceleration [mg]:-49.00 -98.00 2842.00
ACC Raw: 32, -32, 848
ACC: Acceleration [mg]:98.00 -98.00 2597.00
ACC Raw: 32, -16, 880
ACC: Acceleration [mg]:98.00 -49.00 2695.00
ACC Raw: 48, -16, 880
ACC: Acceleration [mg]:147.00 -49.00 2695.00
ACC Raw: 32, -48, 896
ACC: Acceleration [mg]:98.00 -147.00 2744.00
ACC Raw: 48, -48, 912
ACC: Acceleration [mg]:147.00 -147.00 2793.00
ACC Raw: 48, -32, 928
ACC: Acceleration [mg]:147.00 -98.00 2842.00
ACC Raw: 16, -16, 880
ACC: Acceleration [mg]:49.00 -49.00 2695.00
ACC Raw: 64, 0, 912
ACC: Acceleration [mg]:196.00 0.00 2793.00
ACC Raw: 48, -48, 864
ACC: Acceleration [mg]:147.00 -147.00 2646.00
ACC Raw: 32, -32, 880
ACC: Acceleration [mg]:98.00 -98.00 2695.00
ACC Raw: -16, -16, 928
ACC: Acceleration [mg]:-49.00 -49.00 2842.00
ACC Raw: 32, -16, 944
ACC: Acceleration [mg]:98.00 -49.00 2891.00
ACC Raw: 32, -48, 912
ACC: Acceleration [mg]:98.00 -147.00 2793.00
ACC Raw: 32, -32, 896
ACC: Acceleration [mg]:98.00 -98.00 2744.00
ACC Raw: 32, -16, 912
ACC: Acceleration [mg]:98.00 -49.00 2793.00
ACC Raw: 0, 32, 960
ACC: Acceleration [mg]: 0.00 98.00 2940.00
But the ACC XYZ result seems abnormal.
we also captured the waveform as below.
WhoAmI read out.
REG config.
XYZ read out.
And we just put the board steady on the table, but the XYZ vaule is abnormal in this condition.
Do you have any suggestion on this, thank you.
YAN.
2025-03-09 6:15 AM
Hello, here i add one more information, we are using the driver from ST Github, the link is below, thanks.
https://github.com/STMicroelectronics/h3lis331dl-pid