Library to handle the X_NUCLEO_IHM02A1 Motor Control Expansion Board based on the L6470 component.

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   HelloWorld_IHM02A1 ConcorsoFinal HelloWorld_IHM02A1_mbedOS HelloWorld_IHM02A1-Serialinterpreter ... more

Fork of X_NUCLEO_IHM02A1 by ST Expansion SW Team

Motor Control Library

Introduction

Library to handle the X-NUCLEO-IHM02A1 Motor Control Expansion Board based on the the L6470 component.

Daisy-Chain Configuration

The two L6470 components mounted on this board are connected in daisy-chain configuration. This board can be stacked up to four times so that the eight L6470 components will be connected two-by-two in daisy-chain configuration.

Concerning the SSEL pin of the SPI communication, each expansion board must be in one of the following configuration:

  • SB_23 resistor connected only: SSEL on pin A2;
  • SB_7 resistor connected only: SSEL on pin D2;
  • SB_8 resistor connected only: SSEL on pin D10;
  • SB_9 resistor connected only: SSEL on pin D5.

Arduino Connector Compatibility Warning

X-NUCLEO-IHM02A1 is Arduino compatible with one exception: instead of using D13 pin to drive the SPI clock, it uses D3 pin, hence the default configuration for this library is with the SPI clock on D3 pin.

To be fully Arduino compatible the following patch is required:

  • to remove the SB34 resistor;
  • to solder the SB12 resistor.

Alternatively, you can route the Nucleo board’s D13 pin directly to the expansion board’s D3 pin with a wire. In case you patch your expansion board or route the pin, the SPI clock will be driven on D13 pin rather than on D3 pin, and you have also to initialize the sclk PinName variable with D13 rather than D3. This patch is known to be required, for example, on the following boards: NUCLEO-F103RB, NUCLEO-F302RB, NUCLEO-F411RE, and NUCLEO-F429ZI.

If you use D13 pin for the SPI clock, please be aware that on STM32 Nucleo boards you may not drive the LED, otherwise you will get a conflict: the LED on STM32 Nucleo boards is connected to the D13 pin.

Example Applications

Committer:
davide.aliprandi@st.com
Date:
Fri Mar 10 11:09:21 2017 +0100
Revision:
22:ba7f4131a5e0
Aligning to ARM mbed coding style.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davide.aliprandi@st.com 22:ba7f4131a5e0 1 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 2 ******************************************************************************
davide.aliprandi@st.com 22:ba7f4131a5e0 3 * @file XNucleoIhm02a1.h
davide.aliprandi@st.com 22:ba7f4131a5e0 4 * @author AST / Software Platforms and Cloud
davide.aliprandi@st.com 22:ba7f4131a5e0 5 * @version V1.0
davide.aliprandi@st.com 22:ba7f4131a5e0 6 * @date November 3rd, 2015
davide.aliprandi@st.com 22:ba7f4131a5e0 7 * @brief Class header file for the X-NUCLEO-IHM02A1 expansion board.
davide.aliprandi@st.com 22:ba7f4131a5e0 8 ******************************************************************************
davide.aliprandi@st.com 22:ba7f4131a5e0 9 * @attention
davide.aliprandi@st.com 22:ba7f4131a5e0 10 *
davide.aliprandi@st.com 22:ba7f4131a5e0 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
davide.aliprandi@st.com 22:ba7f4131a5e0 12 *
davide.aliprandi@st.com 22:ba7f4131a5e0 13 * Redistribution and use in source and binary forms, with or without modification,
davide.aliprandi@st.com 22:ba7f4131a5e0 14 * are permitted provided that the following conditions are met:
davide.aliprandi@st.com 22:ba7f4131a5e0 15 * 1. Redistributions of source code must retain the above copyright notice,
davide.aliprandi@st.com 22:ba7f4131a5e0 16 * this list of conditions and the following disclaimer.
davide.aliprandi@st.com 22:ba7f4131a5e0 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
davide.aliprandi@st.com 22:ba7f4131a5e0 18 * this list of conditions and the following disclaimer in the documentation
davide.aliprandi@st.com 22:ba7f4131a5e0 19 * and/or other materials provided with the distribution.
davide.aliprandi@st.com 22:ba7f4131a5e0 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
davide.aliprandi@st.com 22:ba7f4131a5e0 21 * may be used to endorse or promote products derived from this software
davide.aliprandi@st.com 22:ba7f4131a5e0 22 * without specific prior written permission.
davide.aliprandi@st.com 22:ba7f4131a5e0 23 *
davide.aliprandi@st.com 22:ba7f4131a5e0 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
davide.aliprandi@st.com 22:ba7f4131a5e0 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
davide.aliprandi@st.com 22:ba7f4131a5e0 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
davide.aliprandi@st.com 22:ba7f4131a5e0 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
davide.aliprandi@st.com 22:ba7f4131a5e0 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
davide.aliprandi@st.com 22:ba7f4131a5e0 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
davide.aliprandi@st.com 22:ba7f4131a5e0 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
davide.aliprandi@st.com 22:ba7f4131a5e0 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
davide.aliprandi@st.com 22:ba7f4131a5e0 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
davide.aliprandi@st.com 22:ba7f4131a5e0 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
davide.aliprandi@st.com 22:ba7f4131a5e0 34 *
davide.aliprandi@st.com 22:ba7f4131a5e0 35 ******************************************************************************
davide.aliprandi@st.com 22:ba7f4131a5e0 36 */
davide.aliprandi@st.com 22:ba7f4131a5e0 37
davide.aliprandi@st.com 22:ba7f4131a5e0 38
davide.aliprandi@st.com 22:ba7f4131a5e0 39 /* Generated with STM32CubeTOO -----------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 40
davide.aliprandi@st.com 22:ba7f4131a5e0 41
davide.aliprandi@st.com 22:ba7f4131a5e0 42 /* Define to prevent recursive inclusion -------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 43
davide.aliprandi@st.com 22:ba7f4131a5e0 44 #ifndef __X_NUCLEO_IHM02A1_CLASS_H
davide.aliprandi@st.com 22:ba7f4131a5e0 45 #define __X_NUCLEO_IHM02A1_CLASS_H
davide.aliprandi@st.com 22:ba7f4131a5e0 46
davide.aliprandi@st.com 22:ba7f4131a5e0 47
davide.aliprandi@st.com 22:ba7f4131a5e0 48 /* Includes ------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 49
davide.aliprandi@st.com 22:ba7f4131a5e0 50 /* ACTION 1 ------------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 51 * Include here platform specific header files. *
davide.aliprandi@st.com 22:ba7f4131a5e0 52 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 53 #include "mbed.h"
davide.aliprandi@st.com 22:ba7f4131a5e0 54 #include "DevSPI.h"
davide.aliprandi@st.com 22:ba7f4131a5e0 55 /* ACTION 2 ------------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 56 * Include here expansion board configuration's header files. *
davide.aliprandi@st.com 22:ba7f4131a5e0 57 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 58 #include "x_nucleo_ihm02a1_config.h"
davide.aliprandi@st.com 22:ba7f4131a5e0 59 /* ACTION 3 ------------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 60 * Include here expansion board's components' header files. *
davide.aliprandi@st.com 22:ba7f4131a5e0 61 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 62 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 63 * #include "COMPONENT_1.h" *
davide.aliprandi@st.com 22:ba7f4131a5e0 64 * #include "COMPONENT_2.h" *
davide.aliprandi@st.com 22:ba7f4131a5e0 65 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 66 #include "L6470.h"
davide.aliprandi@st.com 22:ba7f4131a5e0 67
davide.aliprandi@st.com 22:ba7f4131a5e0 68
davide.aliprandi@st.com 22:ba7f4131a5e0 69 /* Classes -------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 70
davide.aliprandi@st.com 22:ba7f4131a5e0 71 /** Class representing a X-NUCLEO-IHM02A1 board.
davide.aliprandi@st.com 22:ba7f4131a5e0 72 */
davide.aliprandi@st.com 22:ba7f4131a5e0 73 class XNucleoIhm02a1
davide.aliprandi@st.com 22:ba7f4131a5e0 74 {
davide.aliprandi@st.com 22:ba7f4131a5e0 75 public:
davide.aliprandi@st.com 22:ba7f4131a5e0 76
davide.aliprandi@st.com 22:ba7f4131a5e0 77 /*** Constructor, Destructor, and Initialization Methods ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 78
davide.aliprandi@st.com 22:ba7f4131a5e0 79 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 80 * @brief Constructor.
davide.aliprandi@st.com 22:ba7f4131a5e0 81 * @param init_0 pointer to the initialization structure of the first motor.
davide.aliprandi@st.com 22:ba7f4131a5e0 82 * @param init_1 pointer to the initialization structure of the second motor.
davide.aliprandi@st.com 22:ba7f4131a5e0 83 * @param flag_irq pin name of the FLAG pin of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 84 * @param busy_irq pin name of the BUSY pin of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 85 * @param standby_reset pin name of the STBY\RST pin of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 86 * @param ssel pin name of the SSEL pin of the SPI device to be used for communication.
davide.aliprandi@st.com 22:ba7f4131a5e0 87 * @param spi SPI device to be used for communication.
davide.aliprandi@st.com 22:ba7f4131a5e0 88 */
davide.aliprandi@st.com 22:ba7f4131a5e0 89 XNucleoIhm02a1(L6470_init_t *init_0, L6470_init_t *init_1, PinName flag_irq, PinName busy_irq, PinName standby_reset, PinName ssel, DevSPI *spi);
davide.aliprandi@st.com 22:ba7f4131a5e0 90
davide.aliprandi@st.com 22:ba7f4131a5e0 91 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 92 * @brief Constructor.
davide.aliprandi@st.com 22:ba7f4131a5e0 93 * @param init_0 pointer to the initialization structure of the first motor.
davide.aliprandi@st.com 22:ba7f4131a5e0 94 * @param init_1 pointer to the initialization structure of the second motor.
davide.aliprandi@st.com 22:ba7f4131a5e0 95 * @param flag_irq pin name of the FLAG pin of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 96 * @param busy_irq pin name of the BUSY pin of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 97 * @param standby_reset pin name of the STBY\RST pin of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 98 * @param ssel pin name of the SSEL pin of the SPI device to be used for communication.
davide.aliprandi@st.com 22:ba7f4131a5e0 99 * @param mosi pin name of the MOSI pin of the SPI device to be used for communication.
davide.aliprandi@st.com 22:ba7f4131a5e0 100 * @param miso pin name of the MISO pin of the SPI device to be used for communication.
davide.aliprandi@st.com 22:ba7f4131a5e0 101 * @param sclk pin name of the SCLK pin of the SPI device to be used for communication.
davide.aliprandi@st.com 22:ba7f4131a5e0 102 */
davide.aliprandi@st.com 22:ba7f4131a5e0 103 XNucleoIhm02a1(L6470_init_t *init_0, L6470_init_t *init_1, PinName flag_irq, PinName busy_irq, PinName standby_reset, PinName ssel, PinName mosi, PinName miso, PinName sclk);
davide.aliprandi@st.com 22:ba7f4131a5e0 104
davide.aliprandi@st.com 22:ba7f4131a5e0 105 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 106 * @brief Destructor.
davide.aliprandi@st.com 22:ba7f4131a5e0 107 */
davide.aliprandi@st.com 22:ba7f4131a5e0 108 ~XNucleoIhm02a1(void) {}
davide.aliprandi@st.com 22:ba7f4131a5e0 109
davide.aliprandi@st.com 22:ba7f4131a5e0 110 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 111 * @brief Initializing the X-NUCLEO-IHM02A1 board.
davide.aliprandi@st.com 22:ba7f4131a5e0 112 * @retval true if initialization is successful, false otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 113 */
davide.aliprandi@st.com 22:ba7f4131a5e0 114 bool init(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 115
davide.aliprandi@st.com 22:ba7f4131a5e0 116
davide.aliprandi@st.com 22:ba7f4131a5e0 117 /*** Other Public Expansion Board Related Methods ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 118
davide.aliprandi@st.com 22:ba7f4131a5e0 119 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 120 * @brief Getting the array of components.
davide.aliprandi@st.com 22:ba7f4131a5e0 121 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 122 * @retval The array of components.
davide.aliprandi@st.com 22:ba7f4131a5e0 123 */
davide.aliprandi@st.com 22:ba7f4131a5e0 124 L6470 **get_components(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 125 {
davide.aliprandi@st.com 22:ba7f4131a5e0 126 return components;
davide.aliprandi@st.com 22:ba7f4131a5e0 127 }
davide.aliprandi@st.com 22:ba7f4131a5e0 128
davide.aliprandi@st.com 22:ba7f4131a5e0 129 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 130 * @brief Performing the actions set on the motors with calls to a number of
davide.aliprandi@st.com 22:ba7f4131a5e0 131 * "Prepare<Action>()" methods, one for each motor of the daisy-chain.
davide.aliprandi@st.com 22:ba7f4131a5e0 132 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 133 * @retval A pointer to the results returned by the components, i.e. an
davide.aliprandi@st.com 22:ba7f4131a5e0 134 * integer value for each of them.
davide.aliprandi@st.com 22:ba7f4131a5e0 135 */
davide.aliprandi@st.com 22:ba7f4131a5e0 136 virtual uint32_t* perform_prepared_actions(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 137 {
davide.aliprandi@st.com 22:ba7f4131a5e0 138 /* Performing pre-actions, if needed. */
davide.aliprandi@st.com 22:ba7f4131a5e0 139 for (int m = 0; m < L6470DAISYCHAINSIZE; m++) {
davide.aliprandi@st.com 22:ba7f4131a5e0 140 /*
davide.aliprandi@st.com 22:ba7f4131a5e0 141 "GetPosition()" is needed by "PrepareSetMark()" at the time when the
davide.aliprandi@st.com 22:ba7f4131a5e0 142 prepared actions get performed.
davide.aliprandi@st.com 22:ba7f4131a5e0 143 */
davide.aliprandi@st.com 22:ba7f4131a5e0 144 if (components[m]->get_prepared_action() == L6470::PREPARED_SET_MARK) {
davide.aliprandi@st.com 22:ba7f4131a5e0 145 components[m]->prepare_set_mark((uint32_t) components[m]->get_position());
davide.aliprandi@st.com 22:ba7f4131a5e0 146 }
davide.aliprandi@st.com 22:ba7f4131a5e0 147 }
davide.aliprandi@st.com 22:ba7f4131a5e0 148
davide.aliprandi@st.com 22:ba7f4131a5e0 149 /* Performing the prepared actions and getting back raw data. */
davide.aliprandi@st.com 22:ba7f4131a5e0 150 uint8_t *raw_data = components[0]->perform_prepared_actions();
davide.aliprandi@st.com 22:ba7f4131a5e0 151
davide.aliprandi@st.com 22:ba7f4131a5e0 152 /* Processing raw data. */
davide.aliprandi@st.com 22:ba7f4131a5e0 153 for (int m = 0; m < L6470DAISYCHAINSIZE; m++) {
davide.aliprandi@st.com 22:ba7f4131a5e0 154 results[m] = components[m]->get_result(raw_data);
davide.aliprandi@st.com 22:ba7f4131a5e0 155 }
davide.aliprandi@st.com 22:ba7f4131a5e0 156
davide.aliprandi@st.com 22:ba7f4131a5e0 157 /* Returning results. */
davide.aliprandi@st.com 22:ba7f4131a5e0 158 return results;
davide.aliprandi@st.com 22:ba7f4131a5e0 159 }
davide.aliprandi@st.com 22:ba7f4131a5e0 160
davide.aliprandi@st.com 22:ba7f4131a5e0 161
davide.aliprandi@st.com 22:ba7f4131a5e0 162 /*** Public Expansion Board Related Attributes ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 163
davide.aliprandi@st.com 22:ba7f4131a5e0 164 /* ACTION 4 --------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 165 * Declare here a public attribute for each expansion board's component. *
davide.aliprandi@st.com 22:ba7f4131a5e0 166 * You will have to call these attributes' public methods within your *
davide.aliprandi@st.com 22:ba7f4131a5e0 167 * main program. *
davide.aliprandi@st.com 22:ba7f4131a5e0 168 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 169 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 170 * COMPONENT_1 *component_1; *
davide.aliprandi@st.com 22:ba7f4131a5e0 171 * COMPONENT_2 *component_2; *
davide.aliprandi@st.com 22:ba7f4131a5e0 172 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 173 L6470 *l6470_0;
davide.aliprandi@st.com 22:ba7f4131a5e0 174 L6470 *l6470_1;
davide.aliprandi@st.com 22:ba7f4131a5e0 175
davide.aliprandi@st.com 22:ba7f4131a5e0 176
davide.aliprandi@st.com 22:ba7f4131a5e0 177 protected:
davide.aliprandi@st.com 22:ba7f4131a5e0 178
davide.aliprandi@st.com 22:ba7f4131a5e0 179 /*** Protected Expansion Board Related Initialization Methods ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 180
davide.aliprandi@st.com 22:ba7f4131a5e0 181 /* ACTION 5 --------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 182 * Declare here a protected initialization method for each expansion *
davide.aliprandi@st.com 22:ba7f4131a5e0 183 * board's component. *
davide.aliprandi@st.com 22:ba7f4131a5e0 184 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 185 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 186 * bool init_COMPONENT_1(void); *
davide.aliprandi@st.com 22:ba7f4131a5e0 187 * bool init_COMPONENT_2(void); *
davide.aliprandi@st.com 22:ba7f4131a5e0 188 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 189 bool init_L6470_0(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 190 bool init_L6470_1(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 191
davide.aliprandi@st.com 22:ba7f4131a5e0 192
davide.aliprandi@st.com 22:ba7f4131a5e0 193 /*** Component's Instance Variables ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 194
davide.aliprandi@st.com 22:ba7f4131a5e0 195 /* IO Device. */
davide.aliprandi@st.com 22:ba7f4131a5e0 196 DevSPI *dev_spi;
davide.aliprandi@st.com 22:ba7f4131a5e0 197
davide.aliprandi@st.com 22:ba7f4131a5e0 198 /* Components. */
davide.aliprandi@st.com 22:ba7f4131a5e0 199 L6470 *components[L6470DAISYCHAINSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 200
davide.aliprandi@st.com 22:ba7f4131a5e0 201 /* Components' initialization. */
davide.aliprandi@st.com 22:ba7f4131a5e0 202 L6470_init_t *init_components[L6470DAISYCHAINSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 203
davide.aliprandi@st.com 22:ba7f4131a5e0 204 /* Results of prepared actions. */
davide.aliprandi@st.com 22:ba7f4131a5e0 205 uint32_t results[L6470DAISYCHAINSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 206
davide.aliprandi@st.com 22:ba7f4131a5e0 207 /* ACTION 6 --------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 208 * Declare here the component's static and non-static data, one variable *
davide.aliprandi@st.com 22:ba7f4131a5e0 209 * per line. *
davide.aliprandi@st.com 22:ba7f4131a5e0 210 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 211 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 212 * int instance_id; *
davide.aliprandi@st.com 22:ba7f4131a5e0 213 * static int number_of_instances; *
davide.aliprandi@st.com 22:ba7f4131a5e0 214 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 215 /* Data. */
davide.aliprandi@st.com 22:ba7f4131a5e0 216 uint8_t instance_id;
davide.aliprandi@st.com 22:ba7f4131a5e0 217
davide.aliprandi@st.com 22:ba7f4131a5e0 218 /* Static data. */
davide.aliprandi@st.com 22:ba7f4131a5e0 219 static uint8_t number_of_boards;
davide.aliprandi@st.com 22:ba7f4131a5e0 220 };
davide.aliprandi@st.com 22:ba7f4131a5e0 221
davide.aliprandi@st.com 22:ba7f4131a5e0 222 #endif /* __X_NUCLEO_IHM02A1_CLASS_H */
davide.aliprandi@st.com 22:ba7f4131a5e0 223
davide.aliprandi@st.com 22:ba7f4131a5e0 224 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/