Very Simple Library for the STM32F3-Discovery.

Dependents:   accelerometer_test neopixel_square accelerometer_test_minimal Colour_Video_Demo

Revision:
0:c65854d98061
Child:
3:ddbddb863053
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/stm32f3_discovery_lsm303dlhc.h	Wed May 02 02:01:13 2018 +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>&copy; 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****/