/** * @brief Configure the Mems to compass application. * @param None * @retval None */ void Demo_CompassConfig(void) { LSM303DLHCMag_InitTypeDef LSM303DLHC_InitStructure; LSM303DLHCAcc_InitTypeDef LSM303DLHCAcc_InitStructure; LSM303DLHCAcc_FilterConfigTypeDef LSM303DLHCFilter_InitStructure; /* Configure MEMS magnetometer main parameters: temp, working mode, full Scale and Data rate */ LSM303DLHC_InitStructure.Temperature_Sensor = LSM303DLHC_TEMPSENSOR_DISABLE; LSM303DLHC_InitStructure.MagOutput_DataRate =LSM303DLHC_ODR_30_HZ ; LSM303DLHC_InitStructure.MagFull_Scale = LSM303DLHC_FS_8_1_GA; LSM303DLHC_InitStructure.Working_Mode = LSM303DLHC_CONTINUOS_CONVERSION; LSM303DLHC_MagInit(&LSM303DLHC_InitStructure); /* Fill the accelerometer structure */ LSM303DLHCAcc_InitStructure.Power_Mode = LSM303DLHC_NORMAL_MODE; LSM303DLHCAcc_InitStructure.AccOutput_DataRate = LSM303DLHC_ODR_50_HZ; LSM303DLHCAcc_InitStructure.Axes_Enable= LSM303DLHC_AXES_ENABLE; LSM303DLHCAcc_InitStructure.AccFull_Scale = LSM303DLHC_FULLSCALE_2G; LSM303DLHCAcc_InitStructure.BlockData_Update = LSM303DLHC_BlockUpdate_Continous; LSM303DLHCAcc_InitStructure.Endianness=LSM303DLHC_BLE_LSB; LSM303DLHCAcc_InitStructure.High_Resolution=LSM303DLHC_HR_ENABLE; /* Configure the accelerometer main parameters */ LSM303DLHC_AccInit(&LSM303DLHCAcc_InitStructure); /* Fill the accelerometer LPF structure */ LSM303DLHCFilter_InitStructure.HighPassFilter_Mode_Selection =LSM303DLHC_HPM_NORMAL_MODE; LSM303DLHCFilter_InitStructure.HighPassFilter_CutOff_Frequency = LSM303DLHC_HPFCF_16; LSM303DLHCFilter_InitStructure.HighPassFilter_AOI1 = LSM303DLHC_HPF_AOI1_DISABLE; LSM303DLHCFilter_InitStructure.HighPassFilter_AOI2 = LSM303DLHC_HPF_AOI2_DISABLE; /* Configure the accelerometer LPF main parameters */ LSM303DLHC_AccFilterConfig(&LSM303DLHCFilter_InitStructure); }
void compass_init(void) { LSM303DLHCMag_InitTypeDef LSM303DLHC_InitStructure; LSM303DLHC_InitStructure.Temperature_Sensor = LSM303DLHC_TEMPSENSOR_DISABLE; LSM303DLHC_InitStructure.MagOutput_DataRate = LSM303DLHC_ODR_30_HZ; LSM303DLHC_InitStructure.MagFull_Scale = LSM303DLHC_FS_8_1_GA; LSM303DLHC_InitStructure.Working_Mode = LSM303DLHC_CONTINUOS_CONVERSION; LSM303DLHC_MagInit(&LSM303DLHC_InitStructure); }
void accelerometerCompassInit() { LSM303DLHCMag_InitTypeDef LSM303DLHC_InitStructure; LSM303DLHCAcc_InitTypeDef LSM303DLHCAcc_InitStructure; LSM303DLHCAcc_FilterConfigTypeDef LSM303DLHCFilter_InitStructure; uint8_t threshold; /* Configure MEMS magnetometer main parameters: temp, working mode, full Scale and Data rate */ LSM303DLHC_InitStructure.Temperature_Sensor = LSM303DLHC_TEMPSENSOR_DISABLE; LSM303DLHC_InitStructure.MagOutput_DataRate =LSM303DLHC_ODR_30_HZ ; LSM303DLHC_InitStructure.MagFull_Scale = LSM303DLHC_FS_8_1_GA; LSM303DLHC_InitStructure.Working_Mode = LSM303DLHC_CONTINUOS_CONVERSION; LSM303DLHC_MagInit(&LSM303DLHC_InitStructure); /* Fill the accelerometer structure */ LSM303DLHCAcc_InitStructure.Power_Mode = LSM303DLHC_NORMAL_MODE; LSM303DLHCAcc_InitStructure.AccOutput_DataRate = LSM303DLHC_ODR_50_HZ; LSM303DLHCAcc_InitStructure.Axes_Enable= LSM303DLHC_AXES_ENABLE; LSM303DLHCAcc_InitStructure.AccFull_Scale = LSM303DLHC_FULLSCALE_2G; LSM303DLHCAcc_InitStructure.BlockData_Update = LSM303DLHC_BlockUpdate_Continous; LSM303DLHCAcc_InitStructure.Endianness=LSM303DLHC_BLE_LSB; LSM303DLHCAcc_InitStructure.High_Resolution=LSM303DLHC_HR_ENABLE; /* Configure the accelerometer main parameters */ LSM303DLHC_AccInit(&LSM303DLHCAcc_InitStructure); /* Fill the accelerometer LPF structure */ LSM303DLHCFilter_InitStructure.HighPassFilter_Mode_Selection =LSM303DLHC_HPM_NORMAL_MODE; LSM303DLHCFilter_InitStructure.HighPassFilter_CutOff_Frequency = LSM303DLHC_HPFCF_16; LSM303DLHCFilter_InitStructure.HighPassFilter_AOI1 = LSM303DLHC_HPF_AOI1_DISABLE; LSM303DLHCFilter_InitStructure.HighPassFilter_AOI2 = LSM303DLHC_HPF_AOI2_DISABLE; /* Configure the accelerometer LPF main parameters */ LSM303DLHC_AccFilterConfig(&LSM303DLHCFilter_InitStructure); LSM303DLHC_AccIT1Config(LSM303DLHC_IT1_AOI1, ENABLE); threshold = 126; LSM303DLHC_Write(ACC_I2C_ADDRESS, LSM303DLHC_INT1_THS_A, 1, &threshold); LSM303DLHC_AccINT1InterruptConfig(LSM303DLHC_OR_COMBINATION, (LSM303DLHC_X_HIGH | LSM303DLHC_Y_HIGH | LSM303DLHC_Z_HIGH), ENABLE); }
uint8_t BSP_MAGNETO_Init(void) { uint8_t ret = ACCELERO_ERROR; LACCELERO_InitTypeDef LSM303DLHC_InitStruct; if(LSM303DLHC_MagReadID() == I_AM_LMS303DLHC) { LSM303DLHC_InitStruct.Temperature_Sensor = LSM303DLHC_TEMPSENSOR_DISABLE; LSM303DLHC_InitStruct.MagFull_Scale = LSM303DLHC_FS_1_3_GA; LSM303DLHC_InitStruct.MagOutput_DataRate = LSM303DLHC_ODR_75_HZ; LSM303DLHC_InitStruct.Working_Mode = LSM303DLHC_CONTINUOS_CONVERSION; LSM303DLHC_MagInit(&LSM303DLHC_InitStruct); ret = ACCELERO_OK; } else { ret = ACCELERO_ERROR; } return ret; }