Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Space_Invaders_Demo neopixels gpio_test_stm32f3_discovery gpio_test_systimer ... more
Diff: inc/stm32f3_discovery_lsm303dlhc.h
- Revision:
- 0:404f5a4f1385
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/stm32f3_discovery_lsm303dlhc.h Mon May 09 04:00:25 2016 +0000
@@ -0,0 +1,572 @@
+/**
+ ******************************************************************************
+ * @file stm32f3_discovery_lsm303dlhc.h
+ * @author MCD Application Team
+ * @version V1.1.0
+ * @date 20-September-2012
+ * @brief This file contains definitions for stm32f3_discovery_lsm303dlhc.c
+ * firmware driver.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
+ *
+ * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.st.com/software_license_agreement_liberty_v2
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************
+ */
+
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32F3_DISCOVERY_LSM303DLHC_H
+#define __STM32F3_DISCOVERY_LSM303DLHC_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+ #include "stm32f30x.h"
+
+/** @addtogroup Utilities
+ * @{
+ */
+
+/** @addtogroup STM32F3_DISCOVERY
+ * @{
+ */
+
+/** @addtogroup STM32F3_DISCOVERY_LSM303DLHC
+ * @{
+ */
+
+/** @defgroup STM32F3_DISCOVERY_LSM303DLHC_Exported_Types
+ * @{
+ */
+
+/**
+ * @brief LSM303DLHC Status
+ */
+
+/* LSM303DLHC ACC struct */
+typedef struct
+{
+ uint8_t Power_Mode; /* Power-down/Normal Mode */
+ uint8_t AccOutput_DataRate; /* OUT data rate */
+ uint8_t Axes_Enable; /* Axes enable */
+ uint8_t High_Resolution; /* High Resolution enabling/disabling */
+ uint8_t BlockData_Update; /* Block Data Update */
+ uint8_t Endianness; /* Endian Data selection */
+ uint8_t AccFull_Scale; /* Full Scale selection */
+}LSM303DLHCAcc_InitTypeDef;
+
+/* LSM303DLHC Acc High Pass Filter struct */
+typedef struct
+{
+ uint8_t HighPassFilter_Mode_Selection; /* Internal filter mode */
+ uint8_t HighPassFilter_CutOff_Frequency; /* High pass filter cut-off frequency */
+ uint8_t HighPassFilter_AOI1; /* HPF_enabling/disabling for AOI function on interrupt 1 */
+ uint8_t HighPassFilter_AOI2; /* HPF_enabling/disabling for AOI function on interrupt 2 */
+}LSM303DLHCAcc_FilterConfigTypeDef;
+
+/* LSM303DLHC Mag struct */
+typedef struct
+{
+ uint8_t Temperature_Sensor; /* Temperature sensor enable/disable */
+ uint8_t MagOutput_DataRate; /* OUT data rate */
+ uint8_t Working_Mode; /* operating mode */
+ uint8_t MagFull_Scale; /* Full Scale selection */
+}LSM303DLHCMag_InitTypeDef;
+/**
+ * @}
+ */
+
+/** @defgroup STM32F3_DISCOVERY_LSM303DLHC_Exported_Constants
+ * @{
+ */
+#define LSM303DLHC_OK ((uint32_t) 0)
+#define LSM303DLHC_FAIL ((uint32_t) 0)
+
+/* Uncomment the following line to use the default LSM303DLHC_TIMEOUT_UserCallback()
+ function implemented in stm32f3_discovery_lgd20.c file.
+ LSM303DLHC_TIMEOUT_UserCallback() function is called whenever a timeout condition
+ occure during communication (waiting transmit data register empty flag(TXE)
+ or waiting receive data register is not empty flag (RXNE)). */
+ #define USE_DEFAULT_TIMEOUT_CALLBACK
+
+/* Maximum Timeout values for flags waiting loops. These timeouts are not based
+ on accurate values, they just guarantee that the application will not remain
+ stuck if the I2C communication is corrupted.
+ You may modify these timeout values depending on CPU frequency and application
+ conditions (interrupts routines ...). */
+#define LSM303DLHC_FLAG_TIMEOUT ((uint32_t)0x1000)
+#define LSM303DLHC_LONG_TIMEOUT ((uint32_t)(10 * LSM303DLHC_FLAG_TIMEOUT))
+/**
+ * @brief LSM303DLHC I2C Interface pins
+ */
+#define LSM303DLHC_I2C I2C1
+#define LSM303DLHC_I2C_CLK RCC_APB1Periph_I2C1
+
+#define LSM303DLHC_I2C_SCK_PIN GPIO_Pin_6 /* PB.06 */
+#define LSM303DLHC_I2C_SCK_GPIO_PORT GPIOB /* GPIOB */
+#define LSM303DLHC_I2C_SCK_GPIO_CLK RCC_AHBPeriph_GPIOB
+#define LSM303DLHC_I2C_SCK_SOURCE GPIO_PinSource6
+#define LSM303DLHC_I2C_SCK_AF GPIO_AF_4
+
+#define LSM303DLHC_I2C_SDA_PIN GPIO_Pin_7 /* PB.7 */
+#define LSM303DLHC_I2C_SDA_GPIO_PORT GPIOB /* GPIOB */
+#define LSM303DLHC_I2C_SDA_GPIO_CLK RCC_AHBPeriph_GPIOB
+#define LSM303DLHC_I2C_SDA_SOURCE GPIO_PinSource7
+#define LSM303DLHC_I2C_SDA_AF GPIO_AF_4
+
+#define LSM303DLHC_DRDY_PIN GPIO_Pin_2 /* PE.02 */
+#define LSM303DLHC_DRDY_GPIO_PORT GPIOE /* GPIOE */
+#define LSM303DLHC_DRDY_GPIO_CLK RCC_AHBPeriph_GPIOE
+#define LSM303DLHC_DRDY_EXTI_LINE EXTI_Line2
+#define LSM303DLHC_DRDY_EXTI_PORT_SOURCE EXTI_PortSourceGPIOE
+#define LSM303DLHC_DRDY_EXTI_PIN_SOURCE EXTI_PinSource2
+#define LSM303DLHC_DRDY_EXTI_IRQn EXTI2_TS_IRQn
+
+#define LSM303DLHC_I2C_INT1_PIN GPIO_Pin_4 /* PE.04 */
+#define LSM303DLHC_I2C_INT1_GPIO_PORT GPIOE /* GPIOE */
+#define LSM303DLHC_I2C_INT1_GPIO_CLK RCC_AHBPeriph_GPIOE
+#define LSM303DLHC_I2C_INT1_EXTI_LINE EXTI_Line4
+#define LSM303DLHC_I2C_INT1_EXTI_PORT_SOURCE EXTI_PortSourceGPIOE
+#define LSM303DLHC_I2C_INT1_EXTI_PIN_SOURCE EXTI_PinSource4
+#define LSM303DLHC_I2C_INT1_EXTI_IRQn EXTI4_IRQn
+
+#define LSM303DLHC_I2C_INT2_PIN GPIO_Pin_5 /* PE.05 */
+#define LSM303DLHC_I2C_INT2_GPIO_PORT GPIOE /* GPIOE */
+#define LSM303DLHC_I2C_INT2_GPIO_CLK RCC_AHBPeriph_GPIOE
+#define LSM303DLHC_I2C_INT2_EXTI_LINE EXTI_Line5
+#define LSM303DLHC_I2C_INT2_EXTI_PORT_SOURCE EXTI_PortSourceGPIOE
+#define LSM303DLHC_I2C_INT2_EXTI_PIN_SOURCE EXTI_PinSource5ss
+#define LSM303DLHC_I2C_INT2_EXTI_IRQn EXTI9_5_IRQn
+
+/******************************************************************************/
+/*************************** START REGISTER MAPPING **************************/
+/******************************************************************************/
+/* Acceleration Registers */
+#define LSM303DLHC_CTRL_REG1_A 0x20 /* Control register 1 acceleration */
+#define LSM303DLHC_CTRL_REG2_A 0x21 /* Control register 2 acceleration */
+#define LSM303DLHC_CTRL_REG3_A 0x22 /* Control register 3 acceleration */
+#define LSM303DLHC_CTRL_REG4_A 0x23 /* Control register 4 acceleration */
+#define LSM303DLHC_CTRL_REG5_A 0x24 /* Control register 5 acceleration */
+#define LSM303DLHC_CTRL_REG6_A 0x25 /* Control register 6 acceleration */
+#define LSM303DLHC_REFERENCE_A 0x26 /* Reference register acceleration */
+#define LSM303DLHC_STATUS_REG_A 0x27 /* Status register acceleration */
+#define LSM303DLHC_OUT_X_L_A 0x28 /* Output Register X acceleration */
+#define LSM303DLHC_OUT_X_H_A 0x29 /* Output Register X acceleration */
+#define LSM303DLHC_OUT_Y_L_A 0x2A /* Output Register Y acceleration */
+#define LSM303DLHC_OUT_Y_H_A 0x2B /* Output Register Y acceleration */
+#define LSM303DLHC_OUT_Z_L_A 0x2C /* Output Register Z acceleration */
+#define LSM303DLHC_OUT_Z_H_A 0x2D /* Output Register Z acceleration */
+#define LSM303DLHC_FIFO_CTRL_REG_A 0x2E /* Fifo control Register acceleration */
+#define LSM303DLHC_FIFO_SRC_REG_A 0x2F /* Fifo src Register acceleration */
+
+#define LSM303DLHC_INT1_CFG_A 0x30 /* Interrupt 1 configuration Register acceleration */
+#define LSM303DLHC_INT1_SOURCE_A 0x31 /* Interrupt 1 source Register acceleration */
+#define LSM303DLHC_INT1_THS_A 0x32 /* Interrupt 1 Threshold register acceleration */
+#define LSM303DLHC_INT1_DURATION_A 0x33 /* Interrupt 1 DURATION register acceleration */
+
+#define LSM303DLHC_INT2_CFG_A 0x34 /* Interrupt 2 configuration Register acceleration */
+#define LSM303DLHC_INT2_SOURCE_A 0x35 /* Interrupt 2 source Register acceleration */
+#define LSM303DLHC_INT2_THS_A 0x36 /* Interrupt 2 Threshold register acceleration */
+#define LSM303DLHC_INT2_DURATION_A 0x37 /* Interrupt 2 DURATION register acceleration */
+
+#define LSM303DLHC_CLICK_CFG_A 0x38 /* Click configuration Register acceleration */
+#define LSM303DLHC_CLICK_SOURCE_A 0x39 /* Click 2 source Register acceleration */
+#define LSM303DLHC_CLICK_THS_A 0x3A /* Click 2 Threshold register acceleration */
+
+#define LSM303DLHC_TIME_LIMIT_A 0x3B /* Time Limit Register acceleration */
+#define LSM303DLHC_TIME_LATENCY_A 0x3C /* Time Latency Register acceleration */
+#define LSM303DLHC_TIME_WINDOW_A 0x3D /* Time window register acceleration */
+
+/* Magnetic field Registers */
+#define LSM303DLHC_CRA_REG_M 0x00 /* Control register A magnetic field */
+#define LSM303DLHC_CRB_REG_M 0x01 /* Control register B magnetic field */
+#define LSM303DLHC_MR_REG_M 0x02 /* Control register MR magnetic field */
+#define LSM303DLHC_OUT_X_H_M 0x03 /* Output Register X magnetic field */
+#define LSM303DLHC_OUT_X_L_M 0x04 /* Output Register X magnetic field */
+#define LSM303DLHC_OUT_Z_H_M 0x05 /* Output Register Z magnetic field */
+#define LSM303DLHC_OUT_Z_L_M 0x06 /* Output Register Z magnetic field */
+#define LSM303DLHC_OUT_Y_H_M 0x07 /* Output Register Y magnetic field */
+#define LSM303DLHC_OUT_Y_L_M 0x08 /* Output Register Y magnetic field */
+
+#define LSM303DLHC_SR_REG_M 0x09 /* Status Register magnetic field */
+#define LSM303DLHC_IRA_REG_M 0x0A /* IRA Register magnetic field */
+#define LSM303DLHC_IRB_REG_M 0x0B /* IRB Register magnetic field */
+#define LSM303DLHC_IRC_REG_M 0x0C /* IRC Register magnetic field */
+
+#define LSM303DLHC_TEMP_OUT_H_M 0x31 /* Temperature Register magnetic field */
+#define LSM303DLHC_TEMP_OUT_L_M 0x32 /* Temperature Register magnetic field */
+/******************************************************************************/
+/**************************** END REGISTER MAPPING ***************************/
+/******************************************************************************/
+
+#define ACC_I2C_ADDRESS 0x32
+#define MAG_I2C_ADDRESS 0x3C
+
+/** @defgroup Acc_Power_Mode_selection
+ * @{
+ */
+#define LSM303DLHC_NORMAL_MODE ((uint8_t)0x00)
+#define LSM303DLHC_LOWPOWER_MODE ((uint8_t)0x08)
+/**
+ * @}
+ */
+
+/** @defgroup Acc_OutPut_DataRate_Selection
+ * @{
+ */
+#define LSM303DLHC_ODR_1_HZ ((uint8_t)0x10) /*!< Output Data Rate = 1 Hz */
+#define LSM303DLHC_ODR_10_HZ ((uint8_t)0x20) /*!< Output Data Rate = 10 Hz */
+#define LSM303DLHC_ODR_25_HZ ((uint8_t)0x30) /*!< Output Data Rate = 25 Hz */
+#define LSM303DLHC_ODR_50_HZ ((uint8_t)0x40) /*!< Output Data Rate = 50 Hz */
+#define LSM303DLHC_ODR_100_HZ ((uint8_t)0x50) /*!< Output Data Rate = 100 Hz */
+#define LSM303DLHC_ODR_200_HZ ((uint8_t)0x60) /*!< Output Data Rate = 200 Hz */
+#define LSM303DLHC_ODR_400_HZ ((uint8_t)0x70) /*!< Output Data Rate = 400 Hz */
+#define LSM303DLHC_ODR_1620_HZ_LP ((uint8_t)0x80) /*!< Output Data Rate = 1620 Hz only in Low Power Mode */
+#define LSM303DLHC_ODR_1344_HZ ((uint8_t)0x90) /*!< Output Data Rate = 1344 Hz in Normal mode and 5376 Hz in Low Power Mode */
+
+/**
+ * @}
+ */
+
+/** @defgroup Acc_Axes_Selection
+ * @{
+ */
+#define LSM303DLHC_X_ENABLE ((uint8_t)0x01)
+#define LSM303DLHC_Y_ENABLE ((uint8_t)0x02)
+#define LSM303DLHC_Z_ENABLE ((uint8_t)0x04)
+#define LSM303DLHC_AXES_ENABLE ((uint8_t)0x07)
+#define LSM303DLHC_AXES_DISABLE ((uint8_t)0x00)
+/**
+ * @}
+ */
+
+/** @defgroup Acc_High_Resolution
+ * @{
+ */
+#define LSM303DLHC_HR_ENABLE ((uint8_t)0x08)
+#define LSM303DLHC_HR_DISABLE ((uint8_t)0x00)
+/**
+ * @}
+ */
+
+/** @defgroup Acc_Full_Scale_Selection
+ * @{
+ */
+#define LSM303DLHC_FULLSCALE_2G ((uint8_t)0x00) /*!< �2 g */
+#define LSM303DLHC_FULLSCALE_4G ((uint8_t)0x10) /*!< �4 g */
+#define LSM303DLHC_FULLSCALE_8G ((uint8_t)0x20) /*!< �8 g */
+#define LSM303DLHC_FULLSCALE_16G ((uint8_t)0x30) /*!< �16 g */
+/**
+ * @}
+ */
+
+/** @defgroup Acc_Block_Data_Update
+ * @{
+ */
+#define LSM303DLHC_BlockUpdate_Continous ((uint8_t)0x00) /*!< Continuos Update */
+#define LSM303DLHC_BlockUpdate_Single ((uint8_t)0x80) /*!< Single Update: output registers not updated until MSB and LSB reading */
+/**
+ * @}
+ */
+
+/** @defgroup Acc_Endian_Data_selection
+ * @{
+ */
+#define LSM303DLHC_BLE_LSB ((uint8_t)0x00) /*!< Little Endian: data LSB @ lower address */
+#define LSM303DLHC_BLE_MSB ((uint8_t)0x40) /*!< Big Endian: data MSB @ lower address */
+/**
+ * @}
+ */
+
+/** @defgroup Acc_Boot_Mode_selection
+ * @{
+ */
+#define LSM303DLHC_BOOT_NORMALMODE ((uint8_t)0x00)
+#define LSM303DLHC_BOOT_REBOOTMEMORY ((uint8_t)0x80)
+/**
+ * @}
+ */
+
+/** @defgroup Acc_High_Pass_Filter_Mode
+ * @{
+ */
+#define LSM303DLHC_HPM_NORMAL_MODE_RES ((uint8_t)0x00)
+#define LSM303DLHC_HPM_REF_SIGNAL ((uint8_t)0x40)
+#define LSM303DLHC_HPM_NORMAL_MODE ((uint8_t)0x80)
+#define LSM303DLHC_HPM_AUTORESET_INT ((uint8_t)0xC0)
+/**
+ * @}
+ */
+
+/** @defgroup Acc_High_Pass_CUT OFF_Frequency
+ * @{
+ */
+#define LSM303DLHC_HPFCF_8 ((uint8_t)0x00)
+#define LSM303DLHC_HPFCF_16 ((uint8_t)0x10)
+#define LSM303DLHC_HPFCF_32 ((uint8_t)0x20)
+#define LSM303DLHC_HPFCF_64 ((uint8_t)0x30)
+/**
+ * @}
+ */
+
+/** @defgroup Acc_High_Pass_Filter_status
+ * @{
+ */
+#define LSM303DLHC_HIGHPASSFILTER_DISABLE ((uint8_t)0x00)
+#define LSM303DLHC_HIGHPASSFILTER_ENABLE ((uint8_t)0x08)
+/**
+ * @}
+ */
+
+/** @defgroup Acc_High_Pass_Filter_Click_status
+ * @{
+ */
+#define LSM303DLHC_HPF_CLICK_DISABLE ((uint8_t)0x00)
+#define LSM303DLHC_HPF_CLICK_ENABLE ((uint8_t)0x04)
+/**
+ * @}
+ */
+
+/** @defgroup Acc_High_Pass_Filter_AOI1_status
+ * @{
+ */
+#define LSM303DLHC_HPF_AOI1_DISABLE ((uint8_t)0x00)
+#define LSM303DLHC_HPF_AOI1_ENABLE ((uint8_t)0x01)
+/**
+ * @}
+ */
+
+/** @defgroup Acc_High_Pass_Filter_AOI2_status
+ * @{
+ */
+#define LSM303DLHC_HPF_AOI2_DISABLE ((uint8_t)0x00)
+#define LSM303DLHC_HPF_AOI2_ENABLE ((uint8_t)0x02)
+/**
+ * @}
+ */
+
+/** @defgroup Acc_LSM303DLHC_Interrupt1_Configuration_definition
+ * @{
+ */
+#define LSM303DLHC_IT1_CLICK ((uint8_t)0x80)
+#define LSM303DLHC_IT1_AOI1 ((uint8_t)0x40)
+#define LSM303DLHC_IT1_AOI2 ((uint8_t)0x20)
+#define LSM303DLHC_IT1_DRY1 ((uint8_t)0x10)
+#define LSM303DLHC_IT1_DRY2 ((uint8_t)0x08)
+#define LSM303DLHC_IT1_WTM ((uint8_t)0x04)
+#define LSM303DLHC_IT1_OVERRUN ((uint8_t)0x02)
+/**
+ * @}
+ */
+
+/** @defgroup Acc_LSM303DLHC_Interrupt2_Configuration_definition
+ * @{
+ */
+#define LSM303DLHC_IT2_CLICK ((uint8_t)0x80)
+#define LSM303DLHC_IT2_INT1 ((uint8_t)0x40)
+#define LSM303DLHC_IT2_INT2 ((uint8_t)0x20)
+#define LSM303DLHC_IT2_BOOT ((uint8_t)0x10)
+#define LSM303DLHC_IT2_ACT ((uint8_t)0x08)
+#define LSM303DLHC_IT2_HLACTIVE ((uint8_t)0x02)
+/**
+ * @}
+ */
+
+/** @defgroup Acc_INT_Combination_Status
+ * @{
+ */
+#define LSM303DLHC_OR_COMBINATION ((uint8_t)0x00) /*!< OR combination of enabled IRQs */
+#define LSM303DLHC_AND_COMBINATION ((uint8_t)0x80) /*!< AND combination of enabled IRQs */
+#define LSM303DLHC_MOV_RECOGNITION ((uint8_t)0x40) /*!< 6D movement recognition */
+#define LSM303DLHC_POS_RECOGNITION ((uint8_t)0xC0) /*!< 6D position recognition */
+/**
+ * @}
+ */
+
+/** @defgroup Acc_INT_Axes
+ * @{
+ */
+#define LSM303DLHC_Z_HIGH ((uint8_t)0x20) /*!< Z High enabled IRQs */
+#define LSM303DLHC_Z_LOW ((uint8_t)0x10) /*!< Z low enabled IRQs */
+#define LSM303DLHC_Y_HIGH ((uint8_t)0x08) /*!< Y High enabled IRQs */
+#define LSM303DLHC_Y_LOW ((uint8_t)0x04) /*!< Y low enabled IRQs */
+#define LSM303DLHC_X_HIGH ((uint8_t)0x02) /*!< X High enabled IRQs */
+#define LSM303DLHC_X_LOW ((uint8_t)0x01) /*!< X low enabled IRQs */
+/**
+ * @}
+ */
+
+/** @defgroup Acc_INT_Click
+ * @{
+ */
+#define LSM303DLHC_Z_DOUBLE_CLICK ((uint8_t)0x20) /*!< Z double click IRQs */
+#define LSM303DLHC_Z_SINGLE_CLICK ((uint8_t)0x10) /*!< Z single click IRQs */
+#define LSM303DLHC_Y_DOUBLE_CLICK ((uint8_t)0x08) /*!< Y double click IRQs */
+#define LSM303DLHC_Y_SINGLE_CLICK ((uint8_t)0x04) /*!< Y single click IRQs */
+#define LSM303DLHC_X_DOUBLE_CLICK ((uint8_t)0x02) /*!< X double click IRQs */
+#define LSM303DLHC_X_SINGLE_CLICK ((uint8_t)0x01) /*!< X single click IRQs */
+/**
+ * @}
+ */
+
+/** @defgroup Acc_INT1_Interrupt_status
+ * @{
+ */
+#define LSM303DLHC_INT1INTERRUPT_DISABLE ((uint8_t)0x00)
+#define LSM303DLHC_INT1INTERRUPT_ENABLE ((uint8_t)0x80)
+/**
+ * @}
+ */
+
+/** @defgroup Acc_INT1_Interrupt_ActiveEdge
+ * @{
+ */
+#define LSM303DLHC_INT1INTERRUPT_LOW_EDGE ((uint8_t)0x20)
+#define LSM303DLHC_INT1INTERRUPT_HIGH_EDGE ((uint8_t)0x00)
+/**
+ * @}
+ */
+
+/** @defgroup Mag_Data_Rate
+ * @{
+ */
+#define LSM303DLHC_ODR_0_75_HZ ((uint8_t) 0x00) /*!< Output Data Rate = 0.75 Hz */
+#define LSM303DLHC_ODR_1_5_HZ ((uint8_t) 0x04) /*!< Output Data Rate = 1.5 Hz */
+#define LSM303DLHC_ODR_3_0_HZ ((uint8_t) 0x08) /*!< Output Data Rate = 3 Hz */
+#define LSM303DLHC_ODR_7_5_HZ ((uint8_t) 0x0C) /*!< Output Data Rate = 7.5 Hz */
+#define LSM303DLHC_ODR_15_HZ ((uint8_t) 0x10) /*!< Output Data Rate = 15 Hz */
+#define LSM303DLHC_ODR_30_HZ ((uint8_t) 0x14) /*!< Output Data Rate = 30 Hz */
+#define LSM303DLHC_ODR_75_HZ ((uint8_t) 0x18) /*!< Output Data Rate = 75 Hz */
+#define LSM303DLHC_ODR_220_HZ ((uint8_t) 0x1C) /*!< Output Data Rate = 220 Hz */
+/**
+ * @}
+ */
+
+/** @defgroup Mag_Full_Scale
+ * @{
+ */
+#define LSM303DLHC_FS_1_3_GA ((uint8_t) 0x20) /*!< Full scale = �1.3 Gauss */
+#define LSM303DLHC_FS_1_9_GA ((uint8_t) 0x40) /*!< Full scale = �1.9 Gauss */
+#define LSM303DLHC_FS_2_5_GA ((uint8_t) 0x60) /*!< Full scale = �2.5 Gauss */
+#define LSM303DLHC_FS_4_0_GA ((uint8_t) 0x80) /*!< Full scale = �4.0 Gauss */
+#define LSM303DLHC_FS_4_7_GA ((uint8_t) 0xA0) /*!< Full scale = �4.7 Gauss */
+#define LSM303DLHC_FS_5_6_GA ((uint8_t) 0xC0) /*!< Full scale = �5.6 Gauss */
+#define LSM303DLHC_FS_8_1_GA ((uint8_t) 0xE0) /*!< Full scale = �8.1 Gauss */
+/**
+ * @}
+ */
+
+/**
+ * @defgroup Magnetometer_Sensitivity
+ * @{
+ */
+#define LSM303DLHC_M_SENSITIVITY_XY_1_3Ga 1100 /*!< magnetometer X Y axes sensitivity for 1.3 Ga full scale [LSB/Ga] */
+#define LSM303DLHC_M_SENSITIVITY_XY_1_9Ga 855 /*!< magnetometer X Y axes sensitivity for 1.9 Ga full scale [LSB/Ga] */
+#define LSM303DLHC_M_SENSITIVITY_XY_2_5Ga 670 /*!< magnetometer X Y axes sensitivity for 2.5 Ga full scale [LSB/Ga] */
+#define LSM303DLHC_M_SENSITIVITY_XY_4Ga 450 /*!< magnetometer X Y axes sensitivity for 4 Ga full scale [LSB/Ga] */
+#define LSM303DLHC_M_SENSITIVITY_XY_4_7Ga 400 /*!< magnetometer X Y axes sensitivity for 4.7 Ga full scale [LSB/Ga] */
+#define LSM303DLHC_M_SENSITIVITY_XY_5_6Ga 330 /*!< magnetometer X Y axes sensitivity for 5.6 Ga full scale [LSB/Ga] */
+#define LSM303DLHC_M_SENSITIVITY_XY_8_1Ga 230 /*!< magnetometer X Y axes sensitivity for 8.1 Ga full scale [LSB/Ga] */
+#define LSM303DLHC_M_SENSITIVITY_Z_1_3Ga 980 /*!< magnetometer Z axis sensitivity for 1.3 Ga full scale [LSB/Ga] */
+#define LSM303DLHC_M_SENSITIVITY_Z_1_9Ga 760 /*!< magnetometer Z axis sensitivity for 1.9 Ga full scale [LSB/Ga] */
+#define LSM303DLHC_M_SENSITIVITY_Z_2_5Ga 600 /*!< magnetometer Z axis sensitivity for 2.5 Ga full scale [LSB/Ga] */
+#define LSM303DLHC_M_SENSITIVITY_Z_4Ga 400 /*!< magnetometer Z axis sensitivity for 4 Ga full scale [LSB/Ga] */
+#define LSM303DLHC_M_SENSITIVITY_Z_4_7Ga 355 /*!< magnetometer Z axis sensitivity for 4.7 Ga full scale [LSB/Ga] */
+#define LSM303DLHC_M_SENSITIVITY_Z_5_6Ga 295 /*!< magnetometer Z axis sensitivity for 5.6 Ga full scale [LSB/Ga] */
+#define LSM303DLHC_M_SENSITIVITY_Z_8_1Ga 205 /*!< magnetometer Z axis sensitivity for 8.1 Ga full scale [LSB/Ga] */
+/**
+ * @}
+ */
+
+/** @defgroup Mag_Working_Mode
+ * @{
+ */
+#define LSM303DLHC_CONTINUOS_CONVERSION ((uint8_t) 0x00) /*!< Continuous-Conversion Mode */
+#define LSM303DLHC_SINGLE_CONVERSION ((uint8_t) 0x01) /*!< Single-Conversion Mode */
+#define LSM303DLHC_SLEEP ((uint8_t) 0x02) /*!< Sleep Mode */
+/**
+ * @}
+ */
+
+/** @defgroup Mag_Temperature_Sensor
+ * @{
+ */
+#define LSM303DLHC_TEMPSENSOR_ENABLE ((uint8_t) 0x80) /*!< Temp sensor Enable */
+#define LSM303DLHC_TEMPSENSOR_DISABLE ((uint8_t) 0x00) /*!< Temp sensor Disable */
+/**
+ * @}
+ */
+
+/** @defgroup STM32F3_DISCOVERY_LSM303DLHC_Exported_Functions
+ * @{
+ */
+/* Acc functions */
+void LSM303DLHC_AccInit(LSM303DLHCAcc_InitTypeDef *LSM303DLHC_InitStruct);
+void LSM303DLHC_AccRebootCmd(void);
+void LSM303DLHC_AccFilterConfig(LSM303DLHCAcc_FilterConfigTypeDef *LSM303DLHC_FilterStruct) ;
+void LSM303DLHC_AccFilterCmd(uint8_t HighPassFilterState);
+void LSM303DLHC_AccFilterClickCmd(uint8_t HighPassFilterClickState);
+void LSM303DLHC_AccIT1Config(uint8_t LSM303DLHC_IT, FunctionalState NewState);
+void LSM303DLHC_AccIT2Config(uint8_t LSM303DLHC_IT, FunctionalState NewState);
+void LSM303DLHC_AccINT1InterruptConfig(uint8_t ITCombination, uint8_t ITAxes, FunctionalState NewState );
+void LSM303DLHC_AccINT2InterruptConfig(uint8_t ITCombination, uint8_t ITAxes, FunctionalState NewState );
+void LSM303DLHC_AccClickITConfig(uint8_t ITClick, FunctionalState NewState);
+uint8_t LSM303DLHC_AccGetDataStatus(void);
+
+/* Mag functions */
+void LSM303DLHC_MagInit(LSM303DLHCMag_InitTypeDef *LSM303DLHC_InitStruct);
+uint8_t LSM303DLHC_MagGetDataStatus(void);
+
+/* read write funtions */
+uint16_t LSM303DLHC_Write(uint8_t DeviceAddr, uint8_t RegAddr, uint8_t* pBuffer);
+uint16_t LSM303DLHC_Read(uint8_t DeviceAddr, uint8_t RegAddr,uint8_t* pBuffer, uint16_t NumByteToRead);
+
+/* USER Callbacks: This is function for which prototype only is declared in
+ MEMS accelerometre driver and that should be implemented into user applicaiton. */
+/* LSM303DLHC_TIMEOUT_UserCallback() function is called whenever a timeout condition
+ occure during communication (waiting transmit data register empty flag(TXE)
+ or waiting receive data register is not empty flag (RXNE)).
+ You can use the default timeout callback implementation by uncommenting the
+ define USE_DEFAULT_TIMEOUT_CALLBACK in stm32f3_discovery_LSM303DLHC.h file.
+ Typically the user implementation of this callback should reset MEMS peripheral
+ and re-initialize communication or in worst case reset all the application. */
+uint32_t LSM303DLHC_TIMEOUT_UserCallback(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32F3_DISCOVERY_LSM303DLHC_H */
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/