X-CUBE-SPN1-20150128 example source code for one motor compiled under mbed. Tested OK on Nucleo F401. l6474.cpp is modified from original with defines in l6474_target_config.h to select the original behaviour (motor de-energised when halted), or new mode to continue powering with a (reduced) current in the coils (braking/position hold capability). On F401 avoid using mbed's InterruptIn on pins 10-15 (any port). Beware of other conflicts! L0 & F0 are included but untested.

Dependencies:   mbed

Committer:
gregeric
Date:
Tue Oct 13 10:46:01 2015 +0000
Revision:
6:19c1b4a04c24
Parent:
1:75a41f0c0586
Ensure bridge is disabled before resetting the L6474.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gregeric 0:b9444a40a999 1 /**
gregeric 0:b9444a40a999 2 ******************************************************************************
gregeric 0:b9444a40a999 3 * @file Multi/Examples/MotionControl/IHM01A1_ExampleFor1Motor/Src/stm32l0xx_hal_msp.c
gregeric 0:b9444a40a999 4 * @author IPC Rennes
gregeric 0:b9444a40a999 5 * @version V1.5.0
gregeric 0:b9444a40a999 6 * @date November 12, 2014
gregeric 0:b9444a40a999 7 * @brief HAL MSP module.
gregeric 0:b9444a40a999 8 ******************************************************************************
gregeric 0:b9444a40a999 9 * @attention
gregeric 0:b9444a40a999 10 *
gregeric 0:b9444a40a999 11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
gregeric 0:b9444a40a999 12 *
gregeric 0:b9444a40a999 13 * Redistribution and use in source and binary forms, with or without modification,
gregeric 0:b9444a40a999 14 * are permitted provided that the following conditions are met:
gregeric 0:b9444a40a999 15 * 1. Redistributions of source code must retain the above copyright notice,
gregeric 0:b9444a40a999 16 * this list of conditions and the following disclaimer.
gregeric 0:b9444a40a999 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
gregeric 0:b9444a40a999 18 * this list of conditions and the following disclaimer in the documentation
gregeric 0:b9444a40a999 19 * and/or other materials provided with the distribution.
gregeric 0:b9444a40a999 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
gregeric 0:b9444a40a999 21 * may be used to endorse or promote products derived from this software
gregeric 0:b9444a40a999 22 * without specific prior written permission.
gregeric 0:b9444a40a999 23 *
gregeric 0:b9444a40a999 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
gregeric 0:b9444a40a999 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
gregeric 0:b9444a40a999 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
gregeric 0:b9444a40a999 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
gregeric 0:b9444a40a999 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
gregeric 0:b9444a40a999 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
gregeric 0:b9444a40a999 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
gregeric 0:b9444a40a999 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
gregeric 0:b9444a40a999 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
gregeric 0:b9444a40a999 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
gregeric 0:b9444a40a999 34 *
gregeric 0:b9444a40a999 35 ******************************************************************************
gregeric 0:b9444a40a999 36 */
gregeric 0:b9444a40a999 37 #ifdef TARGET_STM32L0
gregeric 0:b9444a40a999 38 /* Includes ------------------------------------------------------------------*/
gregeric 1:75a41f0c0586 39 #include "ihm01a1.h"
gregeric 0:b9444a40a999 40 #include "mbed.h"
gregeric 0:b9444a40a999 41
gregeric 0:b9444a40a999 42 /** @defgroup HAL_MSP
gregeric 0:b9444a40a999 43 * @brief HAL MSP module.
gregeric 0:b9444a40a999 44 * @{
gregeric 0:b9444a40a999 45 */
gregeric 0:b9444a40a999 46
gregeric 0:b9444a40a999 47 /* Private typedef -----------------------------------------------------------*/
gregeric 0:b9444a40a999 48 /* Private define ------------------------------------------------------------*/
gregeric 0:b9444a40a999 49 /* Private macro -------------------------------------------------------------*/
gregeric 0:b9444a40a999 50 /* Private variables ---------------------------------------------------------*/
gregeric 0:b9444a40a999 51
gregeric 0:b9444a40a999 52 /* Private function prototypes -----------------------------------------------*/
gregeric 0:b9444a40a999 53 extern void BSP_MotorControl_StepClockHandler(uint8_t deviceId);
gregeric 0:b9444a40a999 54 extern void BSP_MotorControl_FlagInterruptHandler(void);
gregeric 0:b9444a40a999 55 /* Private functions ---------------------------------------------------------*/
gregeric 0:b9444a40a999 56
gregeric 0:b9444a40a999 57 /** @defgroup HAL_MSP_Private_Functions
gregeric 0:b9444a40a999 58 * @{
gregeric 0:b9444a40a999 59 */
gregeric 0:b9444a40a999 60
gregeric 0:b9444a40a999 61 /**
gregeric 0:b9444a40a999 62 * @brief SPI MSP Initialization
gregeric 0:b9444a40a999 63 * This function configures the hardware resources used in this example:
gregeric 0:b9444a40a999 64 * - Peripheral's clock enable
gregeric 0:b9444a40a999 65 * - Peripheral's GPIO Configuration
gregeric 0:b9444a40a999 66 * @param[in] hspi SPI handle pointer
gregeric 0:b9444a40a999 67 * @retval None
gregeric 0:b9444a40a999 68 */
gregeric 0:b9444a40a999 69 void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
gregeric 0:b9444a40a999 70 {
gregeric 0:b9444a40a999 71 GPIO_InitTypeDef GPIO_InitStruct;
gregeric 0:b9444a40a999 72
gregeric 0:b9444a40a999 73 if(hspi->Instance == SPIx)
gregeric 0:b9444a40a999 74 {
gregeric 0:b9444a40a999 75 /*##-1- Enable peripherals and GPIO Clocks #################################*/
gregeric 0:b9444a40a999 76 /* Enable GPIO TX/RX clock */
gregeric 0:b9444a40a999 77 SPIx_SCK_GPIO_CLK_ENABLE();
gregeric 0:b9444a40a999 78 SPIx_MISO_GPIO_CLK_ENABLE();
gregeric 0:b9444a40a999 79 SPIx_MOSI_GPIO_CLK_ENABLE();
gregeric 0:b9444a40a999 80 /* Enable SPI clock */
gregeric 0:b9444a40a999 81 SPIx_CLK_ENABLE();
gregeric 0:b9444a40a999 82
gregeric 0:b9444a40a999 83 /*##-2- Configure peripheral GPIO ##########################################*/
gregeric 0:b9444a40a999 84 /* SPI SCK GPIO pin configuration */
gregeric 0:b9444a40a999 85 GPIO_InitStruct.Pin = SPIx_SCK_PIN;
gregeric 0:b9444a40a999 86 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
gregeric 0:b9444a40a999 87 GPIO_InitStruct.Pull = GPIO_NOPULL;
gregeric 0:b9444a40a999 88 GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
gregeric 0:b9444a40a999 89 GPIO_InitStruct.Alternate = SPIx_SCK_AF;
gregeric 0:b9444a40a999 90
gregeric 0:b9444a40a999 91 HAL_GPIO_Init(SPIx_SCK_GPIO_PORT, &GPIO_InitStruct);
gregeric 0:b9444a40a999 92
gregeric 0:b9444a40a999 93 /* SPI MISO GPIO pin configuration */
gregeric 0:b9444a40a999 94 GPIO_InitStruct.Pin = SPIx_MISO_PIN;
gregeric 0:b9444a40a999 95 GPIO_InitStruct.Alternate = SPIx_MISO_AF;
gregeric 0:b9444a40a999 96
gregeric 0:b9444a40a999 97 HAL_GPIO_Init(SPIx_MISO_GPIO_PORT, &GPIO_InitStruct);
gregeric 0:b9444a40a999 98
gregeric 0:b9444a40a999 99 /* SPI MOSI GPIO pin configuration */
gregeric 0:b9444a40a999 100 GPIO_InitStruct.Pin = SPIx_MOSI_PIN;
gregeric 0:b9444a40a999 101 GPIO_InitStruct.Alternate = SPIx_MOSI_AF;
gregeric 0:b9444a40a999 102
gregeric 0:b9444a40a999 103 HAL_GPIO_Init(SPIx_MOSI_GPIO_PORT, &GPIO_InitStruct);
gregeric 0:b9444a40a999 104 }
gregeric 0:b9444a40a999 105 }
gregeric 0:b9444a40a999 106
gregeric 0:b9444a40a999 107 /**
gregeric 0:b9444a40a999 108 * @brief SPI MSP De-Initialization
gregeric 0:b9444a40a999 109 * This function frees the hardware resources used in this example:
gregeric 0:b9444a40a999 110 * - Disable the Peripheral's clock
gregeric 0:b9444a40a999 111 * - Revert GPIO configuration to its default state
gregeric 0:b9444a40a999 112 * @param[in] hspi SPI handle pointer
gregeric 0:b9444a40a999 113 * @retval None
gregeric 0:b9444a40a999 114 */
gregeric 0:b9444a40a999 115 void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi)
gregeric 0:b9444a40a999 116 {
gregeric 0:b9444a40a999 117 if(hspi->Instance == SPIx)
gregeric 0:b9444a40a999 118 {
gregeric 0:b9444a40a999 119 /*##-1- Reset peripherals ##################################################*/
gregeric 0:b9444a40a999 120 SPIx_FORCE_RESET();
gregeric 0:b9444a40a999 121 SPIx_RELEASE_RESET();
gregeric 0:b9444a40a999 122
gregeric 0:b9444a40a999 123 /*##-2- Disable peripherals and GPIO Clocks ################################*/
gregeric 0:b9444a40a999 124 /* Configure SPI SCK as alternate function */
gregeric 0:b9444a40a999 125 HAL_GPIO_DeInit(SPIx_SCK_GPIO_PORT, SPIx_SCK_PIN);
gregeric 0:b9444a40a999 126 /* Configure SPI MISO as alternate function */
gregeric 0:b9444a40a999 127 HAL_GPIO_DeInit(SPIx_MISO_GPIO_PORT, SPIx_MISO_PIN);
gregeric 0:b9444a40a999 128 /* Configure SPI MOSI as alternate function */
gregeric 0:b9444a40a999 129 HAL_GPIO_DeInit(SPIx_MOSI_GPIO_PORT, SPIx_MOSI_PIN);
gregeric 0:b9444a40a999 130 }
gregeric 0:b9444a40a999 131 }
gregeric 0:b9444a40a999 132
gregeric 0:b9444a40a999 133 /**
gregeric 0:b9444a40a999 134 * @brief PWM MSP Initialization
gregeric 0:b9444a40a999 135 * @param[in] htim_pwm PWM handle pointer
gregeric 0:b9444a40a999 136 * @retval None
gregeric 0:b9444a40a999 137 */
gregeric 0:b9444a40a999 138 void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm)
gregeric 0:b9444a40a999 139 {
gregeric 0:b9444a40a999 140 GPIO_InitTypeDef GPIO_InitStruct;
gregeric 0:b9444a40a999 141 if(htim_pwm->Instance == BSP_MOTOR_CONTROL_BOARD_TIMER_PWM1)
gregeric 0:b9444a40a999 142 {
gregeric 0:b9444a40a999 143 /* Peripheral clock enable */
gregeric 0:b9444a40a999 144 __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM1_CLCK_ENABLE();
gregeric 0:b9444a40a999 145
gregeric 0:b9444a40a999 146 /* GPIO configuration */
gregeric 0:b9444a40a999 147 GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_PWM_1_PIN;
gregeric 0:b9444a40a999 148 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
gregeric 0:b9444a40a999 149 GPIO_InitStruct.Pull = GPIO_NOPULL;
gregeric 0:b9444a40a999 150 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
gregeric 0:b9444a40a999 151 GPIO_InitStruct.Alternate = BSP_MOTOR_CONTROL_BOARD_AFx_TIMx_PWM1;
gregeric 0:b9444a40a999 152 HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_PWM_1_PORT, &GPIO_InitStruct);
gregeric 0:b9444a40a999 153
gregeric 0:b9444a40a999 154 /* Set Interrupt Group Priority of Timer Interrupt*/
gregeric 0:b9444a40a999 155 HAL_NVIC_SetPriority(BSP_MOTOR_CONTROL_BOARD_PWM1_IRQn, 4, 0);
gregeric 0:b9444a40a999 156
gregeric 0:b9444a40a999 157 /* Enable the timer global Interrupt */
gregeric 0:b9444a40a999 158 HAL_NVIC_EnableIRQ(BSP_MOTOR_CONTROL_BOARD_PWM1_IRQn);
gregeric 0:b9444a40a999 159 }
gregeric 0:b9444a40a999 160 else if(htim_pwm->Instance == BSP_MOTOR_CONTROL_BOARD_TIMER_PWM2)
gregeric 0:b9444a40a999 161 {
gregeric 0:b9444a40a999 162 /* Peripheral clock enable */
gregeric 0:b9444a40a999 163 __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM2_CLCK_ENABLE();
gregeric 0:b9444a40a999 164
gregeric 0:b9444a40a999 165 /* GPIO configuration */
gregeric 0:b9444a40a999 166 GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_PWM_2_PIN;
gregeric 0:b9444a40a999 167 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
gregeric 0:b9444a40a999 168 GPIO_InitStruct.Pull = GPIO_NOPULL;
gregeric 0:b9444a40a999 169 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
gregeric 0:b9444a40a999 170 GPIO_InitStruct.Alternate = BSP_MOTOR_CONTROL_BOARD_AFx_TIMx_PWM2;
gregeric 0:b9444a40a999 171 HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_PWM_2_PORT, &GPIO_InitStruct);
gregeric 0:b9444a40a999 172
gregeric 0:b9444a40a999 173 /* Set Interrupt Group Priority of Timer Interrupt*/
gregeric 0:b9444a40a999 174 HAL_NVIC_SetPriority(BSP_MOTOR_CONTROL_BOARD_PWM2_IRQn, 4, 0);
gregeric 0:b9444a40a999 175
gregeric 0:b9444a40a999 176 /* Enable the timer2 global Interrupt */
gregeric 0:b9444a40a999 177 HAL_NVIC_EnableIRQ(BSP_MOTOR_CONTROL_BOARD_PWM2_IRQn);
gregeric 0:b9444a40a999 178
gregeric 0:b9444a40a999 179 }
gregeric 0:b9444a40a999 180 else if(htim_pwm->Instance == BSP_MOTOR_CONTROL_BOARD_TIMER_PWM3)
gregeric 0:b9444a40a999 181 {
gregeric 0:b9444a40a999 182 /* Peripheral clock enable */
gregeric 0:b9444a40a999 183 __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM3_CLCK_ENABLE();
gregeric 0:b9444a40a999 184
gregeric 0:b9444a40a999 185 /* GPIO configuration */
gregeric 0:b9444a40a999 186 GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_PWM_3_PIN;
gregeric 0:b9444a40a999 187 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
gregeric 0:b9444a40a999 188 GPIO_InitStruct.Pull = GPIO_NOPULL;
gregeric 0:b9444a40a999 189 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
gregeric 0:b9444a40a999 190 HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_PWM_3_PORT, &GPIO_InitStruct);
gregeric 0:b9444a40a999 191
gregeric 0:b9444a40a999 192 /* Set Interrupt Group Priority of Timer Interrupt*/
gregeric 0:b9444a40a999 193 HAL_NVIC_SetPriority(BSP_MOTOR_CONTROL_BOARD_PWM3_IRQn, 3, 0);
gregeric 0:b9444a40a999 194
gregeric 0:b9444a40a999 195 /* Enable the timer global Interrupt */
gregeric 0:b9444a40a999 196 HAL_NVIC_EnableIRQ(BSP_MOTOR_CONTROL_BOARD_PWM3_IRQn);
gregeric 0:b9444a40a999 197 }
gregeric 0:b9444a40a999 198 }
gregeric 0:b9444a40a999 199
gregeric 0:b9444a40a999 200 /**
gregeric 0:b9444a40a999 201 * @brief PWM MSP De-Initialization
gregeric 0:b9444a40a999 202 * @param[in] htim_pwm PWM handle pointer
gregeric 0:b9444a40a999 203 * @retval None
gregeric 0:b9444a40a999 204 */
gregeric 0:b9444a40a999 205 void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* htim_pwm)
gregeric 0:b9444a40a999 206 {
gregeric 0:b9444a40a999 207 if(htim_pwm->Instance == BSP_MOTOR_CONTROL_BOARD_TIMER_PWM1)
gregeric 0:b9444a40a999 208 {
gregeric 0:b9444a40a999 209 /* Peripheral clock disable */
gregeric 0:b9444a40a999 210 __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM1_CLCK_DISABLE();
gregeric 0:b9444a40a999 211
gregeric 0:b9444a40a999 212 /* GPIO Deconfiguration */
gregeric 0:b9444a40a999 213 HAL_GPIO_DeInit(BSP_MOTOR_CONTROL_BOARD_PWM_1_PORT, BSP_MOTOR_CONTROL_BOARD_PWM_1_PIN);
gregeric 0:b9444a40a999 214
gregeric 0:b9444a40a999 215 }
gregeric 0:b9444a40a999 216 else if(htim_pwm->Instance == BSP_MOTOR_CONTROL_BOARD_TIMER_PWM2)
gregeric 0:b9444a40a999 217 {
gregeric 0:b9444a40a999 218 /* Peripheral clock disable */
gregeric 0:b9444a40a999 219 __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM2_CLCK_DISABLE();
gregeric 0:b9444a40a999 220
gregeric 0:b9444a40a999 221 /* GPIO Deconfiguration */
gregeric 0:b9444a40a999 222 HAL_GPIO_DeInit(BSP_MOTOR_CONTROL_BOARD_PWM_2_PORT, BSP_MOTOR_CONTROL_BOARD_PWM_2_PIN);
gregeric 0:b9444a40a999 223
gregeric 0:b9444a40a999 224 }
gregeric 0:b9444a40a999 225 else if(htim_pwm->Instance == BSP_MOTOR_CONTROL_BOARD_TIMER_PWM3)
gregeric 0:b9444a40a999 226 {
gregeric 0:b9444a40a999 227 /* Peripheral clock disable */
gregeric 0:b9444a40a999 228 __BSP_MOTOR_CONTROL_BOARD_TIMER_PWM3_CLCK_DISABLE();
gregeric 0:b9444a40a999 229
gregeric 0:b9444a40a999 230 /* GPIO Deconfiguration */
gregeric 0:b9444a40a999 231 HAL_GPIO_DeInit(BSP_MOTOR_CONTROL_BOARD_PWM_3_PORT, BSP_MOTOR_CONTROL_BOARD_PWM_3_PIN);
gregeric 0:b9444a40a999 232 }
gregeric 0:b9444a40a999 233 }
gregeric 0:b9444a40a999 234
gregeric 0:b9444a40a999 235 /**
gregeric 0:b9444a40a999 236 * @brief PWM Callback
gregeric 0:b9444a40a999 237 * @param[in] htim PWM handle pointer
gregeric 0:b9444a40a999 238 * @retval None
gregeric 0:b9444a40a999 239 */
gregeric 0:b9444a40a999 240 void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
gregeric 0:b9444a40a999 241 {
gregeric 0:b9444a40a999 242 if ((htim->Instance == BSP_MOTOR_CONTROL_BOARD_TIMER_PWM1)&& (htim->Channel == BSP_MOTOR_CONTROL_BOARD_HAL_ACT_CHAN_TIMER_PWM1))
gregeric 0:b9444a40a999 243 {
gregeric 0:b9444a40a999 244 if (BSP_MotorControl_GetDeviceState(0) != INACTIVE)
gregeric 0:b9444a40a999 245 {
gregeric 0:b9444a40a999 246 BSP_MotorControl_StepClockHandler(0);
gregeric 0:b9444a40a999 247 }
gregeric 0:b9444a40a999 248 }
gregeric 0:b9444a40a999 249 if ((htim->Instance == BSP_MOTOR_CONTROL_BOARD_TIMER_PWM2)&& (htim->Channel == BSP_MOTOR_CONTROL_BOARD_HAL_ACT_CHAN_TIMER_PWM2))
gregeric 0:b9444a40a999 250 {
gregeric 0:b9444a40a999 251 if (BSP_MotorControl_GetDeviceState(1) != INACTIVE)
gregeric 0:b9444a40a999 252 {
gregeric 0:b9444a40a999 253 BSP_MotorControl_StepClockHandler(1);
gregeric 0:b9444a40a999 254 }
gregeric 0:b9444a40a999 255 }
gregeric 0:b9444a40a999 256 if ((htim->Instance == BSP_MOTOR_CONTROL_BOARD_TIMER_PWM3)&& (htim->Channel == BSP_MOTOR_CONTROL_BOARD_HAL_ACT_CHAN_TIMER_PWM3))
gregeric 0:b9444a40a999 257 {
gregeric 0:b9444a40a999 258 HAL_GPIO_TogglePin(BSP_MOTOR_CONTROL_BOARD_PWM_3_PORT, BSP_MOTOR_CONTROL_BOARD_PWM_3_PIN);
gregeric 0:b9444a40a999 259 if ((BSP_MotorControl_GetDeviceState(2) != INACTIVE)&&
gregeric 0:b9444a40a999 260 (HAL_GPIO_ReadPin(BSP_MOTOR_CONTROL_BOARD_PWM_3_PORT, BSP_MOTOR_CONTROL_BOARD_PWM_3_PIN) == GPIO_PIN_SET))
gregeric 0:b9444a40a999 261 {
gregeric 0:b9444a40a999 262 BSP_MotorControl_StepClockHandler(2);
gregeric 0:b9444a40a999 263 }
gregeric 0:b9444a40a999 264 }
gregeric 0:b9444a40a999 265 }
gregeric 0:b9444a40a999 266
gregeric 0:b9444a40a999 267 /**
gregeric 0:b9444a40a999 268 * @brief External Line Callback
gregeric 0:b9444a40a999 269 * @param[in] GPIO_Pin pin number
gregeric 0:b9444a40a999 270 * @retval None
gregeric 0:b9444a40a999 271 */
gregeric 0:b9444a40a999 272 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
gregeric 0:b9444a40a999 273 {
gregeric 0:b9444a40a999 274 if (GPIO_Pin == BSP_MOTOR_CONTROL_BOARD_FLAG_PIN)
gregeric 0:b9444a40a999 275 {
gregeric 0:b9444a40a999 276 BSP_MotorControl_FlagInterruptHandler();
gregeric 0:b9444a40a999 277 }
gregeric 0:b9444a40a999 278 }
gregeric 0:b9444a40a999 279 /**
gregeric 0:b9444a40a999 280 * @}
gregeric 0:b9444a40a999 281 */
gregeric 0:b9444a40a999 282
gregeric 0:b9444a40a999 283 /**
gregeric 0:b9444a40a999 284 * @}
gregeric 0:b9444a40a999 285 */
gregeric 0:b9444a40a999 286 #endif
gregeric 0:b9444a40a999 287 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/