Firmware Library for X-NUCLEO-IKS01A2 (MEMS Inertial & Environmental Sensors) Expansion Board

Dependencies:   LPS22HB LSM6DSL LSM303AGR HTS221

Dependents:   Giroscopio_main HelloWorld_IKS01A2 DuckieTownCar HelloWorld_IKS01A2 ... more

Fork of X_NUCLEO_IKS01A2 by ST Expansion SW Team

X-NUCLEO-IKS01A2 MEMS Inertial & Environmental Sensor Nucleo Expansion Board Firmware Package

Introduction

This firmware package includes Components Device Drivers and Board Support Package for STMicroelectronics' X-NUCLEO-IKS01A2 MEMS Inertial & Environmental Sensors Nucleo Expansion Board.

Firmware Library

Class X_NUCLEO_IKS01A2 is intended to represent the MEMS inertial & environmental sensors expansion board with the same name.

The expansion board is basically featuring four IPs:

  1. a HTS221 Relative Humidity and Temperature Sensor,
  2. a LSM303AGR 3-Axis Magnetometer and 3-Axis Accelerometer
  3. a LPS22HB MEMS Pressure and Temperature Sensor
  4. a LSM6DSL 3-Axis Accelerometer and 3-Axis Gyroscope

The expansion board features also a DIL 24-pin socket which makes it possible to add further MEMS adapters and other sensors (e.g. UV index).

It is intentionally implemented as a singleton because only one X_NUCLEO_IKS01A2 at a time might be deployed in a HW component stack. In order to get the singleton instance you have to call class method `instance()`, e.g.:

// Sensors expansion board singleton instance
static X_NUCLEO_IKS01A2 *mems_expansion_board = X_NUCLEO_IKS01A2::instance(D14, D15, D4, D5);


Furthermore, library ST_INTERFACES contains all abstract classes which together constitute the common API to which all existing and future ST components will adhere to.

Example Applications

Files at this revision

API Documentation at this revision

Comitter:
cparata
Date:
Mon Nov 28 14:56:18 2016 +0000
Parent:
0:cad5dab2b21d
Child:
2:49e6947ee5a7
Commit message:
Add pin of interrupts in the main

Changed in this revision

Components/HTS221Sensor/HTS221Sensor.cpp Show annotated file Show diff for this revision Revisions of this file
Components/HTS221Sensor/HTS221Sensor.h Show annotated file Show diff for this revision Revisions of this file
Components/LPS22HBSensor/LPS22HBSensor.cpp Show annotated file Show diff for this revision Revisions of this file
Components/LPS22HBSensor/LPS22HBSensor.h Show annotated file Show diff for this revision Revisions of this file
Components/LSM303AGRSensor/LSM303AGR_ACC_Sensor.cpp Show annotated file Show diff for this revision Revisions of this file
Components/LSM303AGRSensor/LSM303AGR_ACC_Sensor.h Show annotated file Show diff for this revision Revisions of this file
Components/LSM303AGRSensor/LSM303AGR_MAG_Sensor.cpp Show annotated file Show diff for this revision Revisions of this file
Components/LSM303AGRSensor/LSM303AGR_MAG_Sensor.h Show annotated file Show diff for this revision Revisions of this file
Components/LSM6DSLSensor/LSM6DSLSensor.cpp Show annotated file Show diff for this revision Revisions of this file
Components/LSM6DSLSensor/LSM6DSLSensor.h Show annotated file Show diff for this revision Revisions of this file
x_nucleo_iks01a2.cpp Show annotated file Show diff for this revision Revisions of this file
x_nucleo_iks01a2.h Show annotated file Show diff for this revision Revisions of this file
x_nucleo_iks01a2_targets.h Show annotated file Show diff for this revision Revisions of this file
--- a/Components/HTS221Sensor/HTS221Sensor.cpp	Mon Nov 28 13:16:22 2016 +0000
+++ b/Components/HTS221Sensor/HTS221Sensor.cpp	Mon Nov 28 14:56:18 2016 +0000
@@ -1,7 +1,7 @@
 /**
  ******************************************************************************
  * @file    HTS221Sensor.cpp
- * @author  AST
+ * @author  CLab
  * @version V1.0.0
  * @date    5 August 2016
  * @brief   Implementation of an HTS221 Humidity and Temperature sensor.
--- a/Components/HTS221Sensor/HTS221Sensor.h	Mon Nov 28 13:16:22 2016 +0000
+++ b/Components/HTS221Sensor/HTS221Sensor.h	Mon Nov 28 14:56:18 2016 +0000
@@ -1,7 +1,7 @@
 /**
  ******************************************************************************
  * @file    HTS221Sensor.h
- * @author  AST
+ * @author  CLab
  * @version V1.0.0
  * @date    5 August 2016
  * @brief   Abstract class of an HTS221 Humidity and Temperature sensor.
--- a/Components/LPS22HBSensor/LPS22HBSensor.cpp	Mon Nov 28 13:16:22 2016 +0000
+++ b/Components/LPS22HBSensor/LPS22HBSensor.cpp	Mon Nov 28 14:56:18 2016 +0000
@@ -1,7 +1,7 @@
 /**
  ******************************************************************************
  * @file    LPS22HBSensor.cpp
- * @author  AST
+ * @author  CLab
  * @version V1.0.0
  * @date    5 August 2016
  * @brief   Implementation of an LPS22HB Pressure sensor.
--- a/Components/LPS22HBSensor/LPS22HBSensor.h	Mon Nov 28 13:16:22 2016 +0000
+++ b/Components/LPS22HBSensor/LPS22HBSensor.h	Mon Nov 28 14:56:18 2016 +0000
@@ -1,7 +1,7 @@
 /**
  ******************************************************************************
  * @file    LPS22HBSensor.h
- * @author  AST
+ * @author  CLab
  * @version V1.0.0
  * @date    5 August 2016
  * @brief   Abstract Class of an LPS22HB Pressure sensor.
--- a/Components/LSM303AGRSensor/LSM303AGR_ACC_Sensor.cpp	Mon Nov 28 13:16:22 2016 +0000
+++ b/Components/LSM303AGRSensor/LSM303AGR_ACC_Sensor.cpp	Mon Nov 28 14:56:18 2016 +0000
@@ -1,7 +1,7 @@
 /**
  ******************************************************************************
  * @file    LSM303AGR_ACC_Sensor.cpp
- * @author  AST
+ * @author  CLab
  * @version V1.0.0
  * @date    5 August 2016
  * @brief   Implementation an LSM303AGR accelerometer sensor.
--- a/Components/LSM303AGRSensor/LSM303AGR_ACC_Sensor.h	Mon Nov 28 13:16:22 2016 +0000
+++ b/Components/LSM303AGRSensor/LSM303AGR_ACC_Sensor.h	Mon Nov 28 14:56:18 2016 +0000
@@ -1,7 +1,7 @@
 /**
  ******************************************************************************
  * @file    LSM303AGR_ACC_Sensor.h
- * @author  AST
+ * @author  CLab
  * @version V1.0.0
  * @date    5 August 2016
  * @brief   Abstract Class of an LSM303AGR accelerometer sensor.
--- a/Components/LSM303AGRSensor/LSM303AGR_MAG_Sensor.cpp	Mon Nov 28 13:16:22 2016 +0000
+++ b/Components/LSM303AGRSensor/LSM303AGR_MAG_Sensor.cpp	Mon Nov 28 14:56:18 2016 +0000
@@ -1,7 +1,7 @@
 /**
  ******************************************************************************
  * @file    LSM303AGR_MAG_Sensor.cpp
- * @author  AST
+ * @author  CLab
  * @version V1.0.0
  * @date    5 August 2016
  * @brief   Implementation an LSM303AGR magnetometer sensor.
--- a/Components/LSM303AGRSensor/LSM303AGR_MAG_Sensor.h	Mon Nov 28 13:16:22 2016 +0000
+++ b/Components/LSM303AGRSensor/LSM303AGR_MAG_Sensor.h	Mon Nov 28 14:56:18 2016 +0000
@@ -1,7 +1,7 @@
 /**
  ******************************************************************************
  * @file    LSM303AGR_MAG_Sensor.h
- * @author  AST
+ * @author  CLab
  * @version V1.0.0
  * @date    5 August 2016
  * @brief   Abstract Class of an LSM303AGR magnetometer sensor.
--- a/Components/LSM6DSLSensor/LSM6DSLSensor.cpp	Mon Nov 28 13:16:22 2016 +0000
+++ b/Components/LSM6DSLSensor/LSM6DSLSensor.cpp	Mon Nov 28 14:56:18 2016 +0000
@@ -1,7 +1,7 @@
 /**
  ******************************************************************************
  * @file    LSM6DSLSensor.cpp
- * @author  AST
+ * @author  CLab
  * @version V1.0.0
  * @date    5 August 2016
  * @brief   Implementation of an LSM6DSL Inertial Measurement Unit (IMU) 6 axes
--- a/Components/LSM6DSLSensor/LSM6DSLSensor.h	Mon Nov 28 13:16:22 2016 +0000
+++ b/Components/LSM6DSLSensor/LSM6DSLSensor.h	Mon Nov 28 14:56:18 2016 +0000
@@ -1,7 +1,7 @@
 /**
  ******************************************************************************
  * @file    LSM6DSLSensor.h
- * @author  AST
+ * @author  CLab
  * @version V1.0.0
  * @date    5 August 2016
  * @brief   Abstract Class of an LSM6DSL Inertial Measurement Unit (IMU) 6 axes
--- a/x_nucleo_iks01a2.cpp	Mon Nov 28 13:16:22 2016 +0000
+++ b/x_nucleo_iks01a2.cpp	Mon Nov 28 14:56:18 2016 +0000
@@ -1,8 +1,8 @@
 /**
  ******************************************************************************
  * @file    x_nucleo_iks01a2.cpp
- * @author  AST / EST
- * @version V0.0.1
+ * @author  CLab
+ * @version V1.0.0
  * @date    9-August-2016
  * @brief   Implementation file for the X_NUCLEO_IKS01A2 singleton class
  ******************************************************************************
@@ -62,6 +62,23 @@
 }
 
 /**
+ * @brief  Constructor
+ */
+X_NUCLEO_IKS01A2::X_NUCLEO_IKS01A2(DevI2C *ext_i2c, PinName int1, PinName int2) : dev_i2c(ext_i2c),
+    ht_sensor(new HTS221Sensor(*dev_i2c)),
+    magnetometer(new LSM303AGR_MAG_Sensor(*dev_i2c)),
+    accelerometer(new LSM303AGR_ACC_Sensor(*dev_i2c)),
+    pt_sensor(new LPS22HBSensor(*dev_i2c)),
+    acc_gyro(new LSM6DSLSensor(*dev_i2c, int1, int2))
+{ 
+  ht_sensor->Init(NULL);
+  magnetometer->Init(NULL);
+  accelerometer->Init(NULL);
+  pt_sensor->Init(NULL);
+  acc_gyro->Init(NULL);
+}
+
+/**
  * @brief     Get singleton instance
  * @return    a pointer to the initialized singleton instance of class X_NUCLEO_IKS01A2.
  *            A return value of NULL indicates an out of memory situation.
@@ -108,3 +125,33 @@
 
     return _instance;
 }
+
+/**
+ * @brief     Get singleton instance
+ * @return    a pointer to the initialized singleton instance of class X_NUCLEO_IKS01A1.
+ *            A return value of NULL indicates an out of memory situation.
+ * @param[in] sda I2C data line pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            A new DevI2C will be created based on parameters 'sda' and 'scl'.
+ *            The used DevI2C object gets saved in instance variable dev_i2c.
+ * @param[in] scl I2C clock line pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            A new DevI2C will be created based on parameters 'sda' and 'scl'.
+ *            The used DevI2C object gets saved in instance variable dev_i2c.
+ * @param[in] int1 LSM6DSL INT1 pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            It maps the INT1 pin for LSM6DSL.
+ * @param[in] int2 LSM6DSL INT1 pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            It maps the INT2 pin for LSM6DSL.
+ */
+X_NUCLEO_IKS01A2* X_NUCLEO_IKS01A2::Instance(PinName sda, PinName scl, PinName int1, PinName int2) {
+    if(_instance == NULL) {
+        DevI2C *ext_i2c = new DevI2C(sda, scl);
+
+        if(ext_i2c != NULL)
+            _instance = new X_NUCLEO_IKS01A2(ext_i2c, int1, int2);
+    }
+
+    return _instance;
+}
--- a/x_nucleo_iks01a2.h	Mon Nov 28 13:16:22 2016 +0000
+++ b/x_nucleo_iks01a2.h	Mon Nov 28 14:56:18 2016 +0000
@@ -1,8 +1,8 @@
 /**
  ******************************************************************************
  * @file    x_nucleo_iks01a2.h
- * @author  AST / EST
- * @version V0.0.1
+ * @author  CLab
+ * @version V1.0.0
  * @date    9-August-2016
  * @brief   Header file for class X_NUCLEO_IKS01A2 representing a X-NUCLEO-IKS01A2
  *          expansion board
@@ -82,6 +82,7 @@
 {
  protected:
     X_NUCLEO_IKS01A2(DevI2C *ext_i2c);
+    X_NUCLEO_IKS01A2(DevI2C *ext_i2c, PinName int1, PinName int2);
 
     ~X_NUCLEO_IKS01A2(void) {
         /* should never be called */
@@ -91,6 +92,7 @@
  public:
     static X_NUCLEO_IKS01A2* Instance(DevI2C *ext_i2c = NULL);
     static X_NUCLEO_IKS01A2* Instance(PinName sda, PinName scl);
+    static X_NUCLEO_IKS01A2* Instance(PinName sda, PinName scl, PinName int1, PinName int2);
 
     DevI2C  *dev_i2c;
 
--- a/x_nucleo_iks01a2_targets.h	Mon Nov 28 13:16:22 2016 +0000
+++ b/x_nucleo_iks01a2_targets.h	Mon Nov 28 14:56:18 2016 +0000
@@ -1,8 +1,8 @@
 /**
   ******************************************************************************
   * @file    x_nucleo_iks01a2_targets.h
-  * @author  AST / EST
-  * @version V0.0.1
+  * @author  CLab
+  * @version V1.0.0
   * @date    9-August-2016
   * @brief   This header file is intended to manage the differences between 
   *          the different supported base-boards which might mount the