23#ifndef LIS2MDL_CS_GPIO_Port
24#define LIS2MDL_CS_GPIO_Port MAG_CS_GPIO_Port
27#define LIS2MDL_CS_Pin MAG_CS_Pin
32#define platform_delay(ms) HAL_Delay(ms)
36#define LIS2MDL_SPI_TIMEOUT 100
121 return ((float_t)lsb * 1.5f);
126 return (((float_t)lsb / 8.0f) + 25.0f);
139 return ((float_t)lsb * 150.0f);
172 buff[1] = (uint8_t)((uint16_t)val[0] / 256U);
173 buff[0] = (uint8_t)((uint16_t)val[0] - (buff[1] * 256U));
174 buff[3] = (uint8_t)((uint16_t)val[1] / 256U);
175 buff[2] = (uint8_t)((uint16_t)val[1] - (buff[3] * 256U));
176 buff[5] = (uint8_t)((uint16_t)val[2] / 256U);
177 buff[4] = (uint8_t)((uint16_t)val[2] - (buff[5] * 256U));
201 val[0] = (int16_t)buff[1];
202 val[0] = (val[0] * 256) + (int16_t)buff[0];
203 val[1] = (int16_t)buff[3];
204 val[1] = (val[1] * 256) + (int16_t)buff[2];
205 val[2] = (int16_t)buff[5];
206 val[2] = (val[2] * 256) + (int16_t)buff[4];
229 reg.
md = (uint8_t)val;
291 reg.
odr = (uint8_t)val;
356 reg.
lp = (uint8_t)val;
457 reg.
lpf = (uint8_t)val;
709 val[0] = (int16_t)buff[1];
710 val[0] = (val[0] * 256) + (int16_t)buff[0];
711 val[1] = (int16_t)buff[3];
712 val[1] = (val[1] * 256) + (int16_t)buff[2];
713 val[2] = (int16_t)buff[5];
714 val[2] = (val[2] * 256) + (int16_t)buff[4];
733 *val = (int16_t)buff[1];
734 *val = (*val * 256) + (int16_t)buff[0];
914 reg.
ble = (uint8_t)val;
1200 buff[1] = (uint8_t)(val / 256U);
1201 buff[0] = (uint8_t)(val - (buff[1] * 256U));
1224 *val = (*val * 256U) + buff[0];
1259 reg.
_4wspi = (uint8_t)val;
1374 SPI_HandleTypeDef *spi_handle = (SPI_HandleTypeDef *)handle;
1377 if (spi_handle ==
NULL || bufp ==
NULL) {
1382 cmd_byte = reg & 0x7F;
1420 SPI_HandleTypeDef *spi_handle = (SPI_HandleTypeDef *)handle;
1423 if (spi_handle ==
NULL || bufp ==
NULL) {
1428 cmd_byte = (reg & 0x7F) | 0x80;
1431 if(HAL_GPIO_ReadPin(IMU_CS_GPIO_Port,IMU_CS_Pin)!=GPIO_PIN_SET){IMU_CS_HIGH;}
1432 if(HAL_GPIO_ReadPin(BARO_CS_GPIO_Port,BARO_CS_Pin)!=GPIO_PIN_SET){BMP390_CS_HIGH;}
1463 uint8_t who_am_i = 0;
1469 if (ctx ==
NULL)
return -1;
1558 uint8_t who_am_i = 0;
1564 if (ctx ==
NULL)
return -1;
SPI_HandleTypeDef hspi2
HAL SPI handle for Sensor Bus 1 (e.g., IMU, Baro).
SPI_HandleTypeDef hspi3
HAL SPI handle for Sensor Bus 2 (e.g., secondary sensors).
int32_t __weak lis2mdl_write_reg(const stmdev_ctx_t *ctx, uint8_t reg, uint8_t *data, uint16_t len)
Write generic device register.
int32_t __weak lis2mdl_read_reg(const stmdev_ctx_t *ctx, uint8_t reg, uint8_t *data, uint16_t len)
Read generic device register.
float_t lis2mdl_from_lsb_to_nanotesla(int16_t lsb)
Converts raw magnetic data to nanotesla (nT). Sensitivity: 1 LSB = 1.5 mG = 150 nT.
float_t lis2mdl_from_lsb_to_celsius(int16_t lsb)
float_t lis2mdl_from_lsb_to_mgauss(int16_t lsb)
int32_t lis2mdl_self_test_set(const stmdev_ctx_t *ctx, uint8_t val)
Selftest.[set].
int32_t lis2mdl_data_format_set(const stmdev_ctx_t *ctx, lis2mdl_ble_t val)
Big/Little Endian data selection.[set].
int32_t lis2mdl_status_get(const stmdev_ctx_t *ctx, lis2mdl_status_reg_t *val)
Info about device status.[get].
int32_t lis2mdl_self_test_get(const stmdev_ctx_t *ctx, uint8_t *val)
Selftest.[get].
int32_t lis2mdl_data_format_get(const stmdev_ctx_t *ctx, lis2mdl_ble_t *val)
Big/Little Endian data selection.[get].
int32_t lis2mdl_boot_get(const stmdev_ctx_t *ctx, uint8_t *val)
Reboot memory content. Reload the calibration parameters.[get].
int32_t lis2mdl_reset_get(const stmdev_ctx_t *ctx, uint8_t *val)
Software reset. Restore the default values in user registers.[get].
int32_t lis2mdl_reset_set(const stmdev_ctx_t *ctx, uint8_t val)
Software reset. Restore the default values in user registers.[set].
int32_t lis2mdl_device_id_get(const stmdev_ctx_t *ctx, uint8_t *buff)
DeviceWhoamI.[get].
int32_t lis2mdl_boot_set(const stmdev_ctx_t *ctx, uint8_t val)
Reboot memory content. Reload the calibration parameters.[set].
int32_t lis2mdl_offset_temp_comp_get(const stmdev_ctx_t *ctx, uint8_t *val)
Enables the magnetometer temperature compensation.[get].
int32_t lis2mdl_mag_user_offset_get(const stmdev_ctx_t *ctx, int16_t *val)
These registers comprise a 3 group of 16-bit number and represent hard-iron offset in order to compen...
int32_t lis2mdl_set_rst_mode_set(const stmdev_ctx_t *ctx, lis2mdl_set_rst_t val)
Reset mode.[set].
int32_t lis2mdl_low_pass_bandwidth_set(const stmdev_ctx_t *ctx, lis2mdl_lpf_t val)
Low-pass bandwidth selection.[set].
int32_t lis2mdl_set_rst_sensor_single_get(const stmdev_ctx_t *ctx, uint8_t *val)
Enables offset cancellation in single measurement mode. The OFF_CANC bit must be set to 1 when enabli...
int32_t lis2mdl_block_data_update_get(const stmdev_ctx_t *ctx, uint8_t *val)
Blockdataupdate.[get].
int32_t lis2mdl_operating_mode_set(const stmdev_ctx_t *ctx, lis2mdl_md_t val)
Operating mode selection.[set].
int32_t lis2mdl_offset_temp_comp_set(const stmdev_ctx_t *ctx, uint8_t val)
Enables the magnetometer temperature compensation.[set].
int32_t lis2mdl_data_rate_set(const stmdev_ctx_t *ctx, lis2mdl_odr_t val)
Output data rate selection.[set].
int32_t lis2mdl_low_pass_bandwidth_get(const stmdev_ctx_t *ctx, lis2mdl_lpf_t *val)
Low-pass bandwidth selection.[get].
int32_t lis2mdl_set_rst_mode_get(const stmdev_ctx_t *ctx, lis2mdl_set_rst_t *val)
Reset mode.[get].
int32_t lis2mdl_block_data_update_set(const stmdev_ctx_t *ctx, uint8_t val)
Blockdataupdate.[set].
int32_t lis2mdl_mag_data_ready_get(const stmdev_ctx_t *ctx, uint8_t *val)
Magnetic set of data available.[get].
int32_t lis2mdl_power_mode_set(const stmdev_ctx_t *ctx, lis2mdl_lp_t val)
Enables high-resolution/low-power mode.[set].
int32_t lis2mdl_magnetic_raw_get(const stmdev_ctx_t *ctx, int16_t *val)
Magnetic output value.[get].
int32_t lis2mdl_power_mode_get(const stmdev_ctx_t *ctx, lis2mdl_lp_t *val)
Enables high-resolution/low-power mode.[get].
int32_t lis2mdl_mag_data_ovr_get(const stmdev_ctx_t *ctx, uint8_t *val)
Magnetic set of data overrun.[get].
int32_t lis2mdl_set_rst_sensor_single_set(const stmdev_ctx_t *ctx, uint8_t val)
Enables offset cancellation in single measurement mode. The OFF_CANC bit must be set to 1 when enabli...
int32_t lis2mdl_operating_mode_get(const stmdev_ctx_t *ctx, lis2mdl_md_t *val)
Operating mode selection.[get].
int32_t lis2mdl_mag_user_offset_set(const stmdev_ctx_t *ctx, int16_t *val)
These registers comprise a 3 group of 16-bit number and represent hard-iron offset in order to compen...
int32_t lis2mdl_temperature_raw_get(const stmdev_ctx_t *ctx, int16_t *val)
Temperature output value.[get].
int32_t lis2mdl_data_rate_get(const stmdev_ctx_t *ctx, lis2mdl_odr_t *val)
Output data rate selection.[get].
int32_t lis2mdl_int_gen_threshold_set(const stmdev_ctx_t *ctx, uint16_t val)
User-defined threshold value for xl interrupt event on generator. Data format is the same of output d...
int32_t lis2mdl_int_on_pin_set(const stmdev_ctx_t *ctx, uint8_t val)
Interrupt signal on INT_DRDY pin.[set].
int32_t lis2mdl_int_gen_threshold_get(const stmdev_ctx_t *ctx, uint16_t *val)
User-defined threshold value for xl interrupt event on generator. Data format is the same of output d...
int32_t lis2mdl_drdy_on_pin_get(const stmdev_ctx_t *ctx, uint8_t *val)
Data-ready signal on INT_DRDY pin.[get].
int32_t lis2mdl_int_gen_conf_set(const stmdev_ctx_t *ctx, lis2mdl_int_crtl_reg_t *val)
Interrupt generator configuration register.[set].
int32_t lis2mdl_int_on_pin_get(const stmdev_ctx_t *ctx, uint8_t *val)
Interrupt signal on INT_DRDY pin.[get].
int32_t lis2mdl_int_gen_conf_get(const stmdev_ctx_t *ctx, lis2mdl_int_crtl_reg_t *val)
Interrupt generator configuration register.[get].
int32_t lis2mdl_offset_int_conf_set(const stmdev_ctx_t *ctx, lis2mdl_int_on_dataoff_t val)
The interrupt block recognition checks data after/before the hard-iron correction to discover the int...
int32_t lis2mdl_drdy_on_pin_set(const stmdev_ctx_t *ctx, uint8_t val)
Data-ready signal on INT_DRDY pin.[set].
int32_t lis2mdl_offset_int_conf_get(const stmdev_ctx_t *ctx, lis2mdl_int_on_dataoff_t *val)
The interrupt block recognition checks data after/before the hard-iron correction to discover the int...
int32_t lis2mdl_int_gen_source_get(const stmdev_ctx_t *ctx, lis2mdl_int_source_reg_t *val)
Interrupt generator source register.[get].
int32_t lis2mdl_i2c_interface_set(const stmdev_ctx_t *ctx, lis2mdl_i2c_dis_t val)
Enable/Disable I2C interface.[set].
int32_t lis2mdl_i2c_interface_get(const stmdev_ctx_t *ctx, lis2mdl_i2c_dis_t *val)
Enable/Disable I2C interface.[get].
int32_t lis2mdl_spi_mode_set(const stmdev_ctx_t *ctx, lis2mdl_sim_t val)
SPI Serial Interface Mode selection.[set].
int32_t lis2mdl_spi_mode_get(const stmdev_ctx_t *ctx, lis2mdl_sim_t *val)
SPI Serial Interface Mode selection.[get].
#define LIS2MDL_STATUS_REG
#define LIS2MDL_INT_SOURCE_REG
#define LIS2MDL_INT_CRTL_REG
#define LIS2MDL_TEMP_OUT_L_REG
#define LIS2MDL_CFG_REG_C
#define LIS2MDL_CFG_REG_A
#define LIS2MDL_OUTX_L_REG
#define LIS2MDL_CFG_REG_B
#define LIS2MDL_OFFSET_X_REG_L
#define LIS2MDL_INT_THS_L_REG
@ LIS2MDL_SET_SENS_ODR_DIV_63
@ LIS2MDL_SET_SENS_ONLY_AT_POWER_ON
@ LIS2MDL_SENS_OFF_CANC_EVERY_ODR
@ LIS2MDL_HIGH_RESOLUTION
@ LIS2MDL_CONTINUOUS_MODE
#define platform_delay(ms)
#define LIS2MDL_CS_GPIO_Port
#define LIS2MDL_SPI_TIMEOUT
This file contains all the functions prototypes for the lis2mdl_reg.c driver.
: Header for main.c file. This file contains the common defines of the application.
uint8_t off_canc_one_shot
stmdev_write_ptr write_reg