ST Expansion SW Team / X_NUCLEO_IHM14A1

Dependencies:   ST_INTERFACES

Dependents:   HelloWorld_IHM14A1

Fork of X_NUCLEO_IHM14A1 by Davide Aliprandi

Committer:
Davidroid
Date:
Thu Sep 27 14:05:44 2018 +0000
Revision:
2:4fd08b67958c
Library to handle the X-NUCLEO-IHM14A1 Motor Control Expansion Board based on the STSPIN820 component.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Davidroid 2:4fd08b67958c 1 /**
Davidroid 2:4fd08b67958c 2 ******************************************************************************
Davidroid 2:4fd08b67958c 3 * @file stm32f0xx_nucleo_ihm14a1.c
Davidroid 2:4fd08b67958c 4 * @author STM
Davidroid 2:4fd08b67958c 5 * @version V1.1.0
Davidroid 2:4fd08b67958c 6 * @date April 10th, 2018
Davidroid 2:4fd08b67958c 7 * @brief BSP driver for x-nucleo-ihm14a1 Nucleo extension board
Davidroid 2:4fd08b67958c 8 * (based on STSPIN820)
Davidroid 2:4fd08b67958c 9 ******************************************************************************
Davidroid 2:4fd08b67958c 10 * @attention
Davidroid 2:4fd08b67958c 11 *
Davidroid 2:4fd08b67958c 12 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
Davidroid 2:4fd08b67958c 13 *
Davidroid 2:4fd08b67958c 14 * Redistribution and use in source and binary forms, with or without modification,
Davidroid 2:4fd08b67958c 15 * are permitted provided that the following conditions are met:
Davidroid 2:4fd08b67958c 16 * 1. Redistributions of source code must retain the above copyright notice,
Davidroid 2:4fd08b67958c 17 * this list of conditions and the following disclaimer.
Davidroid 2:4fd08b67958c 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
Davidroid 2:4fd08b67958c 19 * this list of conditions and the following disclaimer in the documentation
Davidroid 2:4fd08b67958c 20 * and/or other materials provided with the distribution.
Davidroid 2:4fd08b67958c 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Davidroid 2:4fd08b67958c 22 * may be used to endorse or promote products derived from this software
Davidroid 2:4fd08b67958c 23 * without specific prior written permission.
Davidroid 2:4fd08b67958c 24 *
Davidroid 2:4fd08b67958c 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Davidroid 2:4fd08b67958c 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Davidroid 2:4fd08b67958c 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Davidroid 2:4fd08b67958c 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Davidroid 2:4fd08b67958c 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Davidroid 2:4fd08b67958c 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Davidroid 2:4fd08b67958c 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Davidroid 2:4fd08b67958c 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Davidroid 2:4fd08b67958c 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Davidroid 2:4fd08b67958c 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Davidroid 2:4fd08b67958c 35 *
Davidroid 2:4fd08b67958c 36 ******************************************************************************
Davidroid 2:4fd08b67958c 37 */
Davidroid 2:4fd08b67958c 38
Davidroid 2:4fd08b67958c 39 /* Includes ------------------------------------------------------------------*/
Davidroid 2:4fd08b67958c 40 #if 0
Davidroid 2:4fd08b67958c 41
Davidroid 2:4fd08b67958c 42 /** @addtogroup BSP
Davidroid 2:4fd08b67958c 43 * @{
Davidroid 2:4fd08b67958c 44 */
Davidroid 2:4fd08b67958c 45
Davidroid 2:4fd08b67958c 46 /** @defgroup STM32F0XX_NUCLEO_IHM14A1 STM32F0XX NUCLEO IHM14A1
Davidroid 2:4fd08b67958c 47 * @{
Davidroid 2:4fd08b67958c 48 */
Davidroid 2:4fd08b67958c 49
Davidroid 2:4fd08b67958c 50 /* Private constants ---------------------------------------------------------*/
Davidroid 2:4fd08b67958c 51
Davidroid 2:4fd08b67958c 52 /** @defgroup IHM14A1_Private_Constants IHM14A1 Private Constants
Davidroid 2:4fd08b67958c 53 * @{
Davidroid 2:4fd08b67958c 54 */
Davidroid 2:4fd08b67958c 55
Davidroid 2:4fd08b67958c 56 /// Timer Prescaler for step clocks
Davidroid 2:4fd08b67958c 57 #define TIMER_PRESCALER (32)
Davidroid 2:4fd08b67958c 58
Davidroid 2:4fd08b67958c 59 /// MCU wait time after power bridges are enabled
Davidroid 2:4fd08b67958c 60 #define BRIDGE_TURN_ON_DELAY (10)
Davidroid 2:4fd08b67958c 61
Davidroid 2:4fd08b67958c 62 /// RC Filtering delay on the PWM
Davidroid 2:4fd08b67958c 63 #define PWM_FILTER_TIME_CONSTANT (5)
Davidroid 2:4fd08b67958c 64
Davidroid 2:4fd08b67958c 65 /**
Davidroid 2:4fd08b67958c 66 * @}
Davidroid 2:4fd08b67958c 67 */
Davidroid 2:4fd08b67958c 68
Davidroid 2:4fd08b67958c 69 /* Private variables ---------------------------------------------------------*/
Davidroid 2:4fd08b67958c 70
Davidroid 2:4fd08b67958c 71 /** @defgroup IHM14A1_Board_Private_Variables IHM14A1 Board Private Variables
Davidroid 2:4fd08b67958c 72 * @{
Davidroid 2:4fd08b67958c 73 */
Davidroid 2:4fd08b67958c 74 /// Timer handler for step clock
Davidroid 2:4fd08b67958c 75 TIM_HandleTypeDef hTimerStepClock;
Davidroid 2:4fd08b67958c 76
Davidroid 2:4fd08b67958c 77 /// Step clock compare value
Davidroid 2:4fd08b67958c 78 volatile uint32_t ccrValue;
Davidroid 2:4fd08b67958c 79
Davidroid 2:4fd08b67958c 80 /// Timer handler for REF
Davidroid 2:4fd08b67958c 81 TIM_HandleTypeDef hTimerPwm;
Davidroid 2:4fd08b67958c 82
Davidroid 2:4fd08b67958c 83 /**
Davidroid 2:4fd08b67958c 84 * @}
Davidroid 2:4fd08b67958c 85 */
Davidroid 2:4fd08b67958c 86
Davidroid 2:4fd08b67958c 87 /** @defgroup IHM14A1_Board_Private_Function_Prototypes IHM14A1 Board Private Function Prototypes
Davidroid 2:4fd08b67958c 88 * @{
Davidroid 2:4fd08b67958c 89 */
Davidroid 2:4fd08b67958c 90 //Delay of the requested number of milliseconds
Davidroid 2:4fd08b67958c 91 void Stspin820_Board_Delay(uint32_t delay);
Davidroid 2:4fd08b67958c 92 //Disable Irq
Davidroid 2:4fd08b67958c 93 void Stspin820_Board_DisableIrq(void);
Davidroid 2:4fd08b67958c 94 //Enable Irq
Davidroid 2:4fd08b67958c 95 void Stspin820_Board_EnableIrq(void);
Davidroid 2:4fd08b67958c 96 //Read the status of the Pin DECAY
Davidroid 2:4fd08b67958c 97 uint8_t Stspin820_Board_GetDecayGpio(void);
Davidroid 2:4fd08b67958c 98 //Initialise GPIOs used for STSPIN820
Davidroid 2:4fd08b67958c 99 void Stspin820_Board_GpioInit(void);
Davidroid 2:4fd08b67958c 100 //Start step clock
Davidroid 2:4fd08b67958c 101 void Stspin820_Board_TimStckStart(void);
Davidroid 2:4fd08b67958c 102 //Set step clock frequency and start it
Davidroid 2:4fd08b67958c 103 void Stspin820_Board_TimStckSetFreq(uint16_t newFreq);
Davidroid 2:4fd08b67958c 104 //Sets the frequency and duty cycle of PWM used for the reference voltage
Davidroid 2:4fd08b67958c 105 //generation
Davidroid 2:4fd08b67958c 106 void Stspin820_Board_PwmRefSetFreqAndDutyCycle(uint32_t newFreq,uint8_t dutyCycle);
Davidroid 2:4fd08b67958c 107 //Init the timer
Davidroid 2:4fd08b67958c 108 void Stspin820_Board_TimStckInit(void);
Davidroid 2:4fd08b67958c 109 //DeInit the timer
Davidroid 2:4fd08b67958c 110 void Stspin820_Board_TimStckDeInit(void);
Davidroid 2:4fd08b67958c 111 //Stop the timer
Davidroid 2:4fd08b67958c 112 uint8_t Stspin820_Board_TimStckStop(volatile uint8_t *pToggleOdd);
Davidroid 2:4fd08b67958c 113 //Init the reference voltage pwm
Davidroid 2:4fd08b67958c 114 void Stspin820_Board_PwmRefInit(void);
Davidroid 2:4fd08b67958c 115 //Start the reference voltage pwm
Davidroid 2:4fd08b67958c 116 void Stspin820_Board_PwmRefStart(void);
Davidroid 2:4fd08b67958c 117 //Stop the reference voltage pwm
Davidroid 2:4fd08b67958c 118 void Stspin820_Board_PwmRefStop(void);
Davidroid 2:4fd08b67958c 119 //Set the STSPIN820 STBY RESET pin and leave low consumption mode
Davidroid 2:4fd08b67958c 120 void Stspin820_Board_ReleaseReset(void);
Davidroid 2:4fd08b67958c 121 //Reset the STSPIN820 STBY RESET pin and force low consumption mode
Davidroid 2:4fd08b67958c 122 void Stspin820_Board_Reset(void);
Davidroid 2:4fd08b67958c 123 //Set the state of the direction GPIO
Davidroid 2:4fd08b67958c 124 void Stspin820_Board_SetDirectionGpio(uint8_t gpioState);
Davidroid 2:4fd08b67958c 125 //Set the state of the decay GPIO
Davidroid 2:4fd08b67958c 126 void Stspin820_Board_SetDecayGpio(uint8_t gpioState);
Davidroid 2:4fd08b67958c 127 //Enable the power bridges (leave the output bridges HiZ)
Davidroid 2:4fd08b67958c 128 void Stspin820_Board_Enable(void);
Davidroid 2:4fd08b67958c 129 //Disable the power bridges (force the output bridges HiZ)
Davidroid 2:4fd08b67958c 130 void Stspin820_Board_Disable(void);
Davidroid 2:4fd08b67958c 131 //Get the EN FAULT pin state
Davidroid 2:4fd08b67958c 132 uint32_t Stspin820_Board_EN_AND_FAULT_PIN_GetState(void);
Davidroid 2:4fd08b67958c 133 //Select the STSPIN820 mode1, mode2 and mode3 pins levels
Davidroid 2:4fd08b67958c 134 uint8_t Stspin820_Board_SetModePins(uint8_t modePin1Level,\
Davidroid 2:4fd08b67958c 135 uint8_t modePin2Level,\
Davidroid 2:4fd08b67958c 136 uint8_t modePin3Level);
Davidroid 2:4fd08b67958c 137 //Select Full Step mode
Davidroid 2:4fd08b67958c 138 void Stspin820_Board_SetFullStep(void);
Davidroid 2:4fd08b67958c 139 //Step clock compare value initialization
Davidroid 2:4fd08b67958c 140 void Stspin820_Board_TimStckCompareInit(void);
Davidroid 2:4fd08b67958c 141 /**
Davidroid 2:4fd08b67958c 142 * @}
Davidroid 2:4fd08b67958c 143 */
Davidroid 2:4fd08b67958c 144
Davidroid 2:4fd08b67958c 145 /** @defgroup IHM14A1_Board_Private_Functions IHM14A1 Board Private Functions
Davidroid 2:4fd08b67958c 146 * @{
Davidroid 2:4fd08b67958c 147 */
Davidroid 2:4fd08b67958c 148
Davidroid 2:4fd08b67958c 149 /******************************************************//**
Davidroid 2:4fd08b67958c 150 * @brief This function provides an accurate delay in milliseconds
Davidroid 2:4fd08b67958c 151 * @param[in] delay time length in milliseconds
Davidroid 2:4fd08b67958c 152 * @retval None
Davidroid 2:4fd08b67958c 153 **********************************************************/
Davidroid 2:4fd08b67958c 154 void Stspin820_Board_Delay(uint32_t delay)
Davidroid 2:4fd08b67958c 155 {
Davidroid 2:4fd08b67958c 156 HAL_Delay(delay);
Davidroid 2:4fd08b67958c 157 }
Davidroid 2:4fd08b67958c 158
Davidroid 2:4fd08b67958c 159 /******************************************************//**
Davidroid 2:4fd08b67958c 160 * @brief This function disable the interruptions
Davidroid 2:4fd08b67958c 161 * @retval None
Davidroid 2:4fd08b67958c 162 **********************************************************/
Davidroid 2:4fd08b67958c 163 void Stspin820_Board_DisableIrq(void)
Davidroid 2:4fd08b67958c 164 {
Davidroid 2:4fd08b67958c 165 __disable_irq();
Davidroid 2:4fd08b67958c 166 }
Davidroid 2:4fd08b67958c 167
Davidroid 2:4fd08b67958c 168 /******************************************************//**
Davidroid 2:4fd08b67958c 169 * @brief This function enable the interruptions
Davidroid 2:4fd08b67958c 170 * @retval None
Davidroid 2:4fd08b67958c 171 **********************************************************/
Davidroid 2:4fd08b67958c 172 void Stspin820_Board_EnableIrq(void)
Davidroid 2:4fd08b67958c 173 {
Davidroid 2:4fd08b67958c 174 __enable_irq();
Davidroid 2:4fd08b67958c 175 }
Davidroid 2:4fd08b67958c 176
Davidroid 2:4fd08b67958c 177 /******************************************************//**
Davidroid 2:4fd08b67958c 178 * @brief Read the digital level of GPIO decay pin
Davidroid 2:4fd08b67958c 179 * @retval Value of the decay pin
Davidroid 2:4fd08b67958c 180 **********************************************************/
Davidroid 2:4fd08b67958c 181 uint8_t Stspin820_Board_GetDecayGpio(void)
Davidroid 2:4fd08b67958c 182 {
Davidroid 2:4fd08b67958c 183 uint8_t statusPin;
Davidroid 2:4fd08b67958c 184
Davidroid 2:4fd08b67958c 185 if(HAL_GPIO_ReadPin(BSP_MOTOR_CONTROL_BOARD_PORT_DECAY,\
Davidroid 2:4fd08b67958c 186 BSP_MOTOR_CONTROL_BOARD_PIN_DECAY) != GPIO_PIN_RESET)
Davidroid 2:4fd08b67958c 187 {
Davidroid 2:4fd08b67958c 188 statusPin = 1;
Davidroid 2:4fd08b67958c 189 }
Davidroid 2:4fd08b67958c 190 else
Davidroid 2:4fd08b67958c 191 {
Davidroid 2:4fd08b67958c 192 statusPin = 0;
Davidroid 2:4fd08b67958c 193 }
Davidroid 2:4fd08b67958c 194
Davidroid 2:4fd08b67958c 195 return statusPin;
Davidroid 2:4fd08b67958c 196
Davidroid 2:4fd08b67958c 197 }
Davidroid 2:4fd08b67958c 198
Davidroid 2:4fd08b67958c 199 /******************************************************//**
Davidroid 2:4fd08b67958c 200 * @brief Initiliases the GPIOs used by the STSPIN820
Davidroid 2:4fd08b67958c 201 * @retval None
Davidroid 2:4fd08b67958c 202 **********************************************************/
Davidroid 2:4fd08b67958c 203 void Stspin820_Board_GpioInit(void)
Davidroid 2:4fd08b67958c 204 {
Davidroid 2:4fd08b67958c 205 GPIO_InitTypeDef GPIO_InitStruct;
Davidroid 2:4fd08b67958c 206
Davidroid 2:4fd08b67958c 207 /* GPIO Ports Clock Enable */
Davidroid 2:4fd08b67958c 208 __HAL_RCC_GPIOA_CLK_ENABLE();
Davidroid 2:4fd08b67958c 209 __HAL_RCC_GPIOB_CLK_ENABLE();
Davidroid 2:4fd08b67958c 210 __HAL_RCC_GPIOC_CLK_ENABLE();
Davidroid 2:4fd08b67958c 211
Davidroid 2:4fd08b67958c 212 /* Configure STSPIN820 - EN pin --------------------------------------------*/
Davidroid 2:4fd08b67958c 213 /* When this pin is set low, it is configured just before as */
Davidroid 2:4fd08b67958c 214 /* GPIO_MODE_OUTPUT_PP with GPIO_NOPULL */
Davidroid 2:4fd08b67958c 215 /* When this pin is set high, it is just after configured for FAULT */
Davidroid 2:4fd08b67958c 216 /* as GPIO_MODE_IT_FALLING with GPIO_PULLUP */
Davidroid 2:4fd08b67958c 217 Stspin820_Board_Disable();
Davidroid 2:4fd08b67958c 218
Davidroid 2:4fd08b67958c 219 /* Set Priority of External Line Interrupt used for the FAULT interrupt*/
Davidroid 2:4fd08b67958c 220 HAL_NVIC_SetPriority(BSP_MOTOR_CONTROL_BOARD_IRQn_EN_AND_FAULT,\
Davidroid 2:4fd08b67958c 221 BSP_MOTOR_CONTROL_BOARD_PRIORITY_EN_AND_FAULT,\
Davidroid 2:4fd08b67958c 222 0);
Davidroid 2:4fd08b67958c 223
Davidroid 2:4fd08b67958c 224 /* Enable the External Line Interrupt used for the FAULT interrupt*/
Davidroid 2:4fd08b67958c 225 HAL_NVIC_EnableIRQ(BSP_MOTOR_CONTROL_BOARD_IRQn_EN_AND_FAULT);
Davidroid 2:4fd08b67958c 226
Davidroid 2:4fd08b67958c 227 /* Configure STSPIN820 - MODE1 pin -----------------------------------------*/
Davidroid 2:4fd08b67958c 228 GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_PIN_MODE1;
Davidroid 2:4fd08b67958c 229 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
Davidroid 2:4fd08b67958c 230 GPIO_InitStruct.Pull = GPIO_NOPULL;
Davidroid 2:4fd08b67958c 231 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
Davidroid 2:4fd08b67958c 232 HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_PORT_MODE1, &GPIO_InitStruct);
Davidroid 2:4fd08b67958c 233
Davidroid 2:4fd08b67958c 234 /* Configure STSPIN820 - MODE2 pin -----------------------------------------*/
Davidroid 2:4fd08b67958c 235 GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_PIN_MODE2;
Davidroid 2:4fd08b67958c 236 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
Davidroid 2:4fd08b67958c 237 GPIO_InitStruct.Pull = GPIO_NOPULL;
Davidroid 2:4fd08b67958c 238 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
Davidroid 2:4fd08b67958c 239 HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_PORT_MODE2, &GPIO_InitStruct);
Davidroid 2:4fd08b67958c 240
Davidroid 2:4fd08b67958c 241 /* Configure STSPIN820 - MODE3 pin -----------------------------------------*/
Davidroid 2:4fd08b67958c 242 GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_PIN_MODE3;
Davidroid 2:4fd08b67958c 243 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
Davidroid 2:4fd08b67958c 244 GPIO_InitStruct.Pull = GPIO_NOPULL;
Davidroid 2:4fd08b67958c 245 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
Davidroid 2:4fd08b67958c 246 HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_PORT_MODE3, &GPIO_InitStruct);
Davidroid 2:4fd08b67958c 247
Davidroid 2:4fd08b67958c 248 /* Configure STSPIN820 - DIR pin -------------------------------------------*/
Davidroid 2:4fd08b67958c 249 GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_PIN_DIR;
Davidroid 2:4fd08b67958c 250 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
Davidroid 2:4fd08b67958c 251 GPIO_InitStruct.Pull = GPIO_NOPULL;
Davidroid 2:4fd08b67958c 252 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
Davidroid 2:4fd08b67958c 253 HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_PORT_DIR, &GPIO_InitStruct);
Davidroid 2:4fd08b67958c 254
Davidroid 2:4fd08b67958c 255 /* Configure STSPIN820 - DECAY pin -------------------------------------------*/
Davidroid 2:4fd08b67958c 256 GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_PIN_DECAY;
Davidroid 2:4fd08b67958c 257 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
Davidroid 2:4fd08b67958c 258 GPIO_InitStruct.Pull = GPIO_NOPULL;
Davidroid 2:4fd08b67958c 259 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
Davidroid 2:4fd08b67958c 260 HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_PORT_DECAY, &GPIO_InitStruct);
Davidroid 2:4fd08b67958c 261
Davidroid 2:4fd08b67958c 262 /* Configure STSPIN820 - STBY/RESET pin ------------------------------------*/
Davidroid 2:4fd08b67958c 263 GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_PIN_STBY_RESET;
Davidroid 2:4fd08b67958c 264 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
Davidroid 2:4fd08b67958c 265 GPIO_InitStruct.Pull = GPIO_NOPULL;
Davidroid 2:4fd08b67958c 266 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
Davidroid 2:4fd08b67958c 267 HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_PORT_STBY_RESET, &GPIO_InitStruct);
Davidroid 2:4fd08b67958c 268
Davidroid 2:4fd08b67958c 269 Stspin820_Board_Reset();
Davidroid 2:4fd08b67958c 270
Davidroid 2:4fd08b67958c 271 }
Davidroid 2:4fd08b67958c 272
Davidroid 2:4fd08b67958c 273 /******************************************************//**
Davidroid 2:4fd08b67958c 274 * @brief Starts the step clock
Davidroid 2:4fd08b67958c 275 * @retval None
Davidroid 2:4fd08b67958c 276 * @note The frequency is directly the current speed of the device
Davidroid 2:4fd08b67958c 277 **********************************************************/
Davidroid 2:4fd08b67958c 278 void Stspin820_Board_TimStckStart()
Davidroid 2:4fd08b67958c 279 {
Davidroid 2:4fd08b67958c 280 /* Clear pending timer interrupt */
Davidroid 2:4fd08b67958c 281 if (BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK == TIM_CHANNEL_1)
Davidroid 2:4fd08b67958c 282 {
Davidroid 2:4fd08b67958c 283 __HAL_TIM_CLEAR_IT(&hTimerStepClock, TIM_IT_CC1);
Davidroid 2:4fd08b67958c 284 }
Davidroid 2:4fd08b67958c 285 else if (BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK == TIM_CHANNEL_2)
Davidroid 2:4fd08b67958c 286 {
Davidroid 2:4fd08b67958c 287 __HAL_TIM_CLEAR_IT(&hTimerStepClock, TIM_IT_CC2);
Davidroid 2:4fd08b67958c 288 }
Davidroid 2:4fd08b67958c 289 else if (BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK == TIM_CHANNEL_3)
Davidroid 2:4fd08b67958c 290 {
Davidroid 2:4fd08b67958c 291 __HAL_TIM_CLEAR_IT(&hTimerStepClock, TIM_IT_CC3);
Davidroid 2:4fd08b67958c 292 }
Davidroid 2:4fd08b67958c 293 else if (BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK == TIM_CHANNEL_4)
Davidroid 2:4fd08b67958c 294 {
Davidroid 2:4fd08b67958c 295 __HAL_TIM_CLEAR_IT(&hTimerStepClock, TIM_IT_CC4);
Davidroid 2:4fd08b67958c 296 }
Davidroid 2:4fd08b67958c 297 /* Start timer interrupts */
Davidroid 2:4fd08b67958c 298 #if (BSP_MOTOR_CONTROL_BOARD_OUTPUT_TIM_STCK == TIMER_MAIN_OUTPUT)
Davidroid 2:4fd08b67958c 299 if (hTimerStepClock.Instance->CCER == 0)
Davidroid 2:4fd08b67958c 300 {
Davidroid 2:4fd08b67958c 301 hTimerStepClock.Instance->CCER |=\
Davidroid 2:4fd08b67958c 302 (TIM_OCPOLARITY_LOW<<BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK);
Davidroid 2:4fd08b67958c 303 }
Davidroid 2:4fd08b67958c 304 else
Davidroid 2:4fd08b67958c 305 {
Davidroid 2:4fd08b67958c 306 hTimerStepClock.Instance->CCER = 0;
Davidroid 2:4fd08b67958c 307 }
Davidroid 2:4fd08b67958c 308 HAL_TIM_OC_Start_IT(&hTimerStepClock,\
Davidroid 2:4fd08b67958c 309 BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK);
Davidroid 2:4fd08b67958c 310 #endif /* (BSP_MOTOR_CONTROL_BOARD_OUTPUT_TIM_STCK == TIMER_MAIN_OUTPUT) */
Davidroid 2:4fd08b67958c 311
Davidroid 2:4fd08b67958c 312 #if (BSP_MOTOR_CONTROL_BOARD_OUTPUT_TIM_STCK == TIMER_COMPLEMENTARY_OUTPUT)
Davidroid 2:4fd08b67958c 313 if (hTimerStepClock.Instance->CCER == 0)
Davidroid 2:4fd08b67958c 314 {
Davidroid 2:4fd08b67958c 315 hTimerStepClock.Instance->CCER |=\
Davidroid 2:4fd08b67958c 316 (TIM_OCNPOLARITY_LOW<<BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK);
Davidroid 2:4fd08b67958c 317 }
Davidroid 2:4fd08b67958c 318 else
Davidroid 2:4fd08b67958c 319 {
Davidroid 2:4fd08b67958c 320 hTimerStepClock.Instance->CCER = 0;
Davidroid 2:4fd08b67958c 321 }
Davidroid 2:4fd08b67958c 322 HAL_TIMEx_OCN_Start_IT(&hTimerStepClock,\
Davidroid 2:4fd08b67958c 323 BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK);
Davidroid 2:4fd08b67958c 324 #endif /* (BSP_MOTOR_CONTROL_BOARD_OUTPUT_TIM_STCK == TIMER_COMPLEMENTARY_OUTPUT) */
Davidroid 2:4fd08b67958c 325
Davidroid 2:4fd08b67958c 326 #if (BSP_MOTOR_CONTROL_BOARD_OUTPUT_TIM_STCK == TIMER_NO_OUTPUT)
Davidroid 2:4fd08b67958c 327 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_TIM_STCK,\
Davidroid 2:4fd08b67958c 328 BSP_MOTOR_CONTROL_BOARD_PIN_TIM_STCK,\
Davidroid 2:4fd08b67958c 329 GPIO_PIN_RESET);
Davidroid 2:4fd08b67958c 330 HAL_TIM_OC_Start_IT(&hTimerStepClock,\
Davidroid 2:4fd08b67958c 331 BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK);
Davidroid 2:4fd08b67958c 332 #endif /* (BSP_MOTOR_CONTROL_BOARD_OUTPUT_TIM_STCK == TIMER_NO_OUTPUT) */
Davidroid 2:4fd08b67958c 333 }
Davidroid 2:4fd08b67958c 334
Davidroid 2:4fd08b67958c 335 /******************************************************//**
Davidroid 2:4fd08b67958c 336 * @brief Step clock compare value initialization
Davidroid 2:4fd08b67958c 337 * @retval None
Davidroid 2:4fd08b67958c 338 **********************************************************/
Davidroid 2:4fd08b67958c 339 void Stspin820_Board_TimStckCompareInit(void)
Davidroid 2:4fd08b67958c 340 {
Davidroid 2:4fd08b67958c 341 ccrValue = hTimerStepClock.Instance->CNT;
Davidroid 2:4fd08b67958c 342 }
Davidroid 2:4fd08b67958c 343
Davidroid 2:4fd08b67958c 344 /******************************************************//**
Davidroid 2:4fd08b67958c 345 * @brief Sets the frequency of step clock
Davidroid 2:4fd08b67958c 346 * @param[in] newFreq in Hz
Davidroid 2:4fd08b67958c 347 * @retval None
Davidroid 2:4fd08b67958c 348 * @note The frequency is directly the current speed of the device
Davidroid 2:4fd08b67958c 349 **********************************************************/
Davidroid 2:4fd08b67958c 350 void Stspin820_Board_TimStckSetFreq(uint16_t newFreq)
Davidroid 2:4fd08b67958c 351 {
Davidroid 2:4fd08b67958c 352 ccrValue += (HAL_RCC_GetSysClockFreq()/\
Davidroid 2:4fd08b67958c 353 (TIMER_PRESCALER * 2 * (uint32_t)newFreq));
Davidroid 2:4fd08b67958c 354 __HAL_TIM_SET_COMPARE(&hTimerStepClock,\
Davidroid 2:4fd08b67958c 355 BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK,\
Davidroid 2:4fd08b67958c 356 ccrValue);
Davidroid 2:4fd08b67958c 357 }
Davidroid 2:4fd08b67958c 358
Davidroid 2:4fd08b67958c 359 /******************************************************//**
Davidroid 2:4fd08b67958c 360 * @brief Starts the PWM used for the reference voltage generation
Davidroid 2:4fd08b67958c 361 * @retval None
Davidroid 2:4fd08b67958c 362 **********************************************************/
Davidroid 2:4fd08b67958c 363 void Stspin820_Board_PwmRefStart(void)
Davidroid 2:4fd08b67958c 364 {
Davidroid 2:4fd08b67958c 365 HAL_TIM_PWM_Start_IT(&hTimerPwm, BSP_MOTOR_CONTROL_BOARD_CHAN_PWM_REF);
Davidroid 2:4fd08b67958c 366 HAL_Delay(5*PWM_FILTER_TIME_CONSTANT);
Davidroid 2:4fd08b67958c 367 }
Davidroid 2:4fd08b67958c 368
Davidroid 2:4fd08b67958c 369 /******************************************************//**
Davidroid 2:4fd08b67958c 370 * @brief Sets the frequency and duty cycle of PWM used for the reference
Davidroid 2:4fd08b67958c 371 * voltage generation
Davidroid 2:4fd08b67958c 372 * @param[in] newFreq in Hz
Davidroid 2:4fd08b67958c 373 * @param[in] dutyCycle 0 - 100%
Davidroid 2:4fd08b67958c 374 * @retval None
Davidroid 2:4fd08b67958c 375 **********************************************************/
Davidroid 2:4fd08b67958c 376 void Stspin820_Board_PwmRefSetFreqAndDutyCycle(uint32_t newFreq, uint8_t dutyCycle)
Davidroid 2:4fd08b67958c 377 {
Davidroid 2:4fd08b67958c 378 uint32_t sysFreq = HAL_RCC_GetSysClockFreq();
Davidroid 2:4fd08b67958c 379 uint32_t period = (sysFreq/newFreq) - 1;
Davidroid 2:4fd08b67958c 380 uint16_t pulseLength;
Davidroid 2:4fd08b67958c 381 TIM_HandleTypeDef *pHTim;
Davidroid 2:4fd08b67958c 382
Davidroid 2:4fd08b67958c 383 pHTim = &hTimerPwm;
Davidroid 2:4fd08b67958c 384 pHTim->Instance = BSP_MOTOR_CONTROL_BOARD_PWM_REF;
Davidroid 2:4fd08b67958c 385
Davidroid 2:4fd08b67958c 386 if (dutyCycle > 100) dutyCycle = 100;
Davidroid 2:4fd08b67958c 387 pulseLength = (uint16_t)((period * (100-(uint32_t)dutyCycle)) / 100);
Davidroid 2:4fd08b67958c 388
Davidroid 2:4fd08b67958c 389 __HAL_TIM_SET_AUTORELOAD(pHTim, period);
Davidroid 2:4fd08b67958c 390 __HAL_TIM_SET_COMPARE(pHTim, BSP_MOTOR_CONTROL_BOARD_CHAN_PWM_REF, pulseLength);
Davidroid 2:4fd08b67958c 391 }
Davidroid 2:4fd08b67958c 392
Davidroid 2:4fd08b67958c 393 /******************************************************//**
Davidroid 2:4fd08b67958c 394 * @brief Initialises the PWM used for the reference voltage generation
Davidroid 2:4fd08b67958c 395 * @retval None
Davidroid 2:4fd08b67958c 396 **********************************************************/
Davidroid 2:4fd08b67958c 397 void Stspin820_Board_PwmRefInit(void)
Davidroid 2:4fd08b67958c 398 {
Davidroid 2:4fd08b67958c 399 TIM_OC_InitTypeDef sConfigOC;
Davidroid 2:4fd08b67958c 400 TIM_MasterConfigTypeDef sMasterConfig;
Davidroid 2:4fd08b67958c 401 TIM_HandleTypeDef *pHTim;
Davidroid 2:4fd08b67958c 402
Davidroid 2:4fd08b67958c 403 pHTim = &hTimerPwm;
Davidroid 2:4fd08b67958c 404
Davidroid 2:4fd08b67958c 405 pHTim->Instance = BSP_MOTOR_CONTROL_BOARD_PWM_REF;
Davidroid 2:4fd08b67958c 406 pHTim->Init.CounterMode = TIM_COUNTERMODE_UP;
Davidroid 2:4fd08b67958c 407 pHTim->Init.Prescaler = 0;
Davidroid 2:4fd08b67958c 408 pHTim->Init.Period = 0;
Davidroid 2:4fd08b67958c 409 pHTim->Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
Davidroid 2:4fd08b67958c 410
Davidroid 2:4fd08b67958c 411 sConfigOC.OCMode = TIM_OCMODE_PWM1;
Davidroid 2:4fd08b67958c 412 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
Davidroid 2:4fd08b67958c 413 sConfigOC.Pulse = 0;
Davidroid 2:4fd08b67958c 414
Davidroid 2:4fd08b67958c 415 HAL_TIM_PWM_Init(pHTim);
Davidroid 2:4fd08b67958c 416 HAL_TIM_PWM_ConfigChannel(pHTim, &sConfigOC, BSP_MOTOR_CONTROL_BOARD_CHAN_PWM_REF);
Davidroid 2:4fd08b67958c 417
Davidroid 2:4fd08b67958c 418 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
Davidroid 2:4fd08b67958c 419 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
Davidroid 2:4fd08b67958c 420 HAL_TIMEx_MasterConfigSynchronization(pHTim, &sMasterConfig);
Davidroid 2:4fd08b67958c 421 }
Davidroid 2:4fd08b67958c 422
Davidroid 2:4fd08b67958c 423 /******************************************************//**
Davidroid 2:4fd08b67958c 424 * @brief Initialises the timer used for the step clock
Davidroid 2:4fd08b67958c 425 * @retval None
Davidroid 2:4fd08b67958c 426 **********************************************************/
Davidroid 2:4fd08b67958c 427 void Stspin820_Board_TimStckInit(void)
Davidroid 2:4fd08b67958c 428 {
Davidroid 2:4fd08b67958c 429 TIM_OC_InitTypeDef sConfigOC;
Davidroid 2:4fd08b67958c 430 TIM_MasterConfigTypeDef sMasterConfig;
Davidroid 2:4fd08b67958c 431 TIM_HandleTypeDef *pHTim;
Davidroid 2:4fd08b67958c 432 uint32_t output = BSP_MOTOR_CONTROL_BOARD_OUTPUT_TIM_STCK;
Davidroid 2:4fd08b67958c 433
Davidroid 2:4fd08b67958c 434 pHTim = &hTimerStepClock;
Davidroid 2:4fd08b67958c 435 pHTim->Instance = BSP_MOTOR_CONTROL_BOARD_TIM_STCK;
Davidroid 2:4fd08b67958c 436 pHTim->Init.CounterMode = TIM_COUNTERMODE_UP;
Davidroid 2:4fd08b67958c 437 pHTim->Init.Prescaler = TIMER_PRESCALER -1;
Davidroid 2:4fd08b67958c 438 pHTim->Init.Period = 0xFFFF;
Davidroid 2:4fd08b67958c 439 pHTim->Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
Davidroid 2:4fd08b67958c 440 HAL_TIM_OC_Init(pHTim);
Davidroid 2:4fd08b67958c 441
Davidroid 2:4fd08b67958c 442 if (output != TIMER_COMPLEMENTARY_OUTPUT)
Davidroid 2:4fd08b67958c 443 {
Davidroid 2:4fd08b67958c 444 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
Davidroid 2:4fd08b67958c 445 }
Davidroid 2:4fd08b67958c 446 else
Davidroid 2:4fd08b67958c 447 {
Davidroid 2:4fd08b67958c 448 sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW;
Davidroid 2:4fd08b67958c 449 }
Davidroid 2:4fd08b67958c 450 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
Davidroid 2:4fd08b67958c 451 sConfigOC.Pulse = 0;
Davidroid 2:4fd08b67958c 452 if (pHTim->Instance != TIM15)
Davidroid 2:4fd08b67958c 453 {
Davidroid 2:4fd08b67958c 454 /* Setting the OCMode to TIM_OCMODE_FORCED_ACTIVE ensures that on the */
Davidroid 2:4fd08b67958c 455 /* first interrupt occuring in the toggle mode, a rising edge will occur */
Davidroid 2:4fd08b67958c 456 sConfigOC.OCMode = TIM_OCMODE_FORCED_ACTIVE;
Davidroid 2:4fd08b67958c 457 HAL_TIM_OC_ConfigChannel(pHTim, &sConfigOC, BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK);
Davidroid 2:4fd08b67958c 458 sConfigOC.OCMode = TIM_OCMODE_TOGGLE;
Davidroid 2:4fd08b67958c 459 }
Davidroid 2:4fd08b67958c 460 else
Davidroid 2:4fd08b67958c 461 {
Davidroid 2:4fd08b67958c 462 sConfigOC.OCMode = TIM_OCMODE_TIMING;
Davidroid 2:4fd08b67958c 463 }
Davidroid 2:4fd08b67958c 464 HAL_TIM_OC_ConfigChannel(pHTim, &sConfigOC, BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK);
Davidroid 2:4fd08b67958c 465
Davidroid 2:4fd08b67958c 466 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
Davidroid 2:4fd08b67958c 467 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
Davidroid 2:4fd08b67958c 468 HAL_TIMEx_MasterConfigSynchronization(pHTim, &sMasterConfig);
Davidroid 2:4fd08b67958c 469 }
Davidroid 2:4fd08b67958c 470
Davidroid 2:4fd08b67958c 471 /******************************************************//**
Davidroid 2:4fd08b67958c 472 * @brief DeInitialises the timer used for the step clock
Davidroid 2:4fd08b67958c 473 * @retval None
Davidroid 2:4fd08b67958c 474 **********************************************************/
Davidroid 2:4fd08b67958c 475 void Stspin820_Board_TimStckDeInit(void)
Davidroid 2:4fd08b67958c 476 {
Davidroid 2:4fd08b67958c 477 HAL_TIM_OC_DeInit(&hTimerStepClock);
Davidroid 2:4fd08b67958c 478 }
Davidroid 2:4fd08b67958c 479
Davidroid 2:4fd08b67958c 480 /******************************************************//**
Davidroid 2:4fd08b67958c 481 * @brief Stops the timer
Davidroid 2:4fd08b67958c 482 * @param[in] pToggleOdd pointer to the volatile toggleOdd variable
Davidroid 2:4fd08b67958c 483 * @retval 1 if OK, 0 if STCK pin is high (forbidden configuration)
Davidroid 2:4fd08b67958c 484 **********************************************************/
Davidroid 2:4fd08b67958c 485 uint8_t Stspin820_Board_TimStckStop(volatile uint8_t *pToggleOdd)
Davidroid 2:4fd08b67958c 486 {
Davidroid 2:4fd08b67958c 487 __disable_irq();
Davidroid 2:4fd08b67958c 488 if (*pToggleOdd == 1)
Davidroid 2:4fd08b67958c 489 {
Davidroid 2:4fd08b67958c 490 __enable_irq();
Davidroid 2:4fd08b67958c 491 return 1;
Davidroid 2:4fd08b67958c 492 }
Davidroid 2:4fd08b67958c 493 if (HAL_GPIO_ReadPin(BSP_MOTOR_CONTROL_BOARD_PORT_TIM_STCK,\
Davidroid 2:4fd08b67958c 494 BSP_MOTOR_CONTROL_BOARD_PIN_TIM_STCK) != 0)
Davidroid 2:4fd08b67958c 495 {
Davidroid 2:4fd08b67958c 496 __enable_irq();
Davidroid 2:4fd08b67958c 497 return 0;
Davidroid 2:4fd08b67958c 498 }
Davidroid 2:4fd08b67958c 499 #if (BSP_MOTOR_CONTROL_BOARD_OUTPUT_TIM_STCK == TIMER_COMPLEMENTARY_OUTPUT)
Davidroid 2:4fd08b67958c 500 HAL_TIMEx_OCN_Stop_IT(&hTimerStepClock, BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK);
Davidroid 2:4fd08b67958c 501 #else
Davidroid 2:4fd08b67958c 502 HAL_TIM_OC_Stop_IT(&hTimerStepClock, BSP_MOTOR_CONTROL_BOARD_CHAN_TIM_STCK);
Davidroid 2:4fd08b67958c 503 #endif
Davidroid 2:4fd08b67958c 504 __enable_irq();
Davidroid 2:4fd08b67958c 505 /* DeInitialize the step clock timer */
Davidroid 2:4fd08b67958c 506 Stspin820_Board_TimStckDeInit();
Davidroid 2:4fd08b67958c 507 return 1;
Davidroid 2:4fd08b67958c 508 }
Davidroid 2:4fd08b67958c 509
Davidroid 2:4fd08b67958c 510 /******************************************************//**
Davidroid 2:4fd08b67958c 511 * @brief Stops the PWM used for the reference voltage generation
Davidroid 2:4fd08b67958c 512 * @retval None
Davidroid 2:4fd08b67958c 513 **********************************************************/
Davidroid 2:4fd08b67958c 514 void Stspin820_Board_PwmRefStop(void)
Davidroid 2:4fd08b67958c 515 {
Davidroid 2:4fd08b67958c 516 HAL_TIM_PWM_Stop_IT(&hTimerPwm, BSP_MOTOR_CONTROL_BOARD_CHAN_PWM_REF);
Davidroid 2:4fd08b67958c 517 }
Davidroid 2:4fd08b67958c 518
Davidroid 2:4fd08b67958c 519 /******************************************************//**
Davidroid 2:4fd08b67958c 520 * @brief Releases the STSPIN820 reset (pin set to High)
Davidroid 2:4fd08b67958c 521 * @retval None
Davidroid 2:4fd08b67958c 522 **********************************************************/
Davidroid 2:4fd08b67958c 523 void Stspin820_Board_ReleaseReset(void)
Davidroid 2:4fd08b67958c 524 {
Davidroid 2:4fd08b67958c 525 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_STBY_RESET,\
Davidroid 2:4fd08b67958c 526 BSP_MOTOR_CONTROL_BOARD_PIN_STBY_RESET,\
Davidroid 2:4fd08b67958c 527 GPIO_PIN_SET);
Davidroid 2:4fd08b67958c 528 }
Davidroid 2:4fd08b67958c 529
Davidroid 2:4fd08b67958c 530 /******************************************************//**
Davidroid 2:4fd08b67958c 531 * @brief Resets the STSPIN820 (reset pin set to low)
Davidroid 2:4fd08b67958c 532 * @retval None
Davidroid 2:4fd08b67958c 533 **********************************************************/
Davidroid 2:4fd08b67958c 534 void Stspin820_Board_Reset(void)
Davidroid 2:4fd08b67958c 535 {
Davidroid 2:4fd08b67958c 536 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_STBY_RESET,\
Davidroid 2:4fd08b67958c 537 BSP_MOTOR_CONTROL_BOARD_PIN_STBY_RESET,\
Davidroid 2:4fd08b67958c 538 GPIO_PIN_RESET);
Davidroid 2:4fd08b67958c 539 }
Davidroid 2:4fd08b67958c 540
Davidroid 2:4fd08b67958c 541 /******************************************************//**
Davidroid 2:4fd08b67958c 542 * @brief Set the GPIO used for the decay mode
Davidroid 2:4fd08b67958c 543 * @param[in] gpioState state of the direction gpio (0 to reset, 1 to set)
Davidroid 2:4fd08b67958c 544 * @retval None
Davidroid 2:4fd08b67958c 545 **********************************************************/
Davidroid 2:4fd08b67958c 546 void Stspin820_Board_SetDecayGpio(uint8_t gpioState)
Davidroid 2:4fd08b67958c 547 {
Davidroid 2:4fd08b67958c 548 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_DECAY,\
Davidroid 2:4fd08b67958c 549 BSP_MOTOR_CONTROL_BOARD_PIN_DECAY,\
Davidroid 2:4fd08b67958c 550 (GPIO_PinState)gpioState);
Davidroid 2:4fd08b67958c 551 }
Davidroid 2:4fd08b67958c 552
Davidroid 2:4fd08b67958c 553 /******************************************************//**
Davidroid 2:4fd08b67958c 554 * @brief Set the GPIO used for the direction
Davidroid 2:4fd08b67958c 555 * @param[in] gpioState state of the direction gpio (0 to reset, 1 to set)
Davidroid 2:4fd08b67958c 556 * @retval None
Davidroid 2:4fd08b67958c 557 **********************************************************/
Davidroid 2:4fd08b67958c 558 void Stspin820_Board_SetDirectionGpio(uint8_t gpioState)
Davidroid 2:4fd08b67958c 559 {
Davidroid 2:4fd08b67958c 560 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_DIR,\
Davidroid 2:4fd08b67958c 561 BSP_MOTOR_CONTROL_BOARD_PIN_DIR,\
Davidroid 2:4fd08b67958c 562 (GPIO_PinState)gpioState);
Davidroid 2:4fd08b67958c 563 }
Davidroid 2:4fd08b67958c 564
Davidroid 2:4fd08b67958c 565 /******************************************************//**
Davidroid 2:4fd08b67958c 566 * @brief Disable the power bridges (Force the output bridges HiZ)
Davidroid 2:4fd08b67958c 567 * the IHM14A1 board
Davidroid 2:4fd08b67958c 568 * @retval None
Davidroid 2:4fd08b67958c 569 **********************************************************/
Davidroid 2:4fd08b67958c 570 void Stspin820_Board_Disable(void)
Davidroid 2:4fd08b67958c 571 {
Davidroid 2:4fd08b67958c 572 GPIO_InitTypeDef GPIO_InitStruct;
Davidroid 2:4fd08b67958c 573
Davidroid 2:4fd08b67958c 574 /* Configure the GPIO connected to EN pin as an output */
Davidroid 2:4fd08b67958c 575 GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_PIN_EN_AND_FAULT;
Davidroid 2:4fd08b67958c 576 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
Davidroid 2:4fd08b67958c 577 GPIO_InitStruct.Pull = GPIO_NOPULL;
Davidroid 2:4fd08b67958c 578 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
Davidroid 2:4fd08b67958c 579 HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_PORT_EN_AND_FAULT, &GPIO_InitStruct);
Davidroid 2:4fd08b67958c 580 __disable_irq();
Davidroid 2:4fd08b67958c 581 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_EN_AND_FAULT,\
Davidroid 2:4fd08b67958c 582 BSP_MOTOR_CONTROL_BOARD_PIN_EN_AND_FAULT,\
Davidroid 2:4fd08b67958c 583 GPIO_PIN_RESET);
Davidroid 2:4fd08b67958c 584 __HAL_GPIO_EXTI_CLEAR_IT(BSP_MOTOR_CONTROL_BOARD_PIN_EN_AND_FAULT);
Davidroid 2:4fd08b67958c 585 __enable_irq();
Davidroid 2:4fd08b67958c 586 }
Davidroid 2:4fd08b67958c 587
Davidroid 2:4fd08b67958c 588 /******************************************************//**
Davidroid 2:4fd08b67958c 589 * @brief Enable the power bridges (leave the output bridges HiZ)
Davidroid 2:4fd08b67958c 590 * @retval None
Davidroid 2:4fd08b67958c 591 **********************************************************/
Davidroid 2:4fd08b67958c 592 void Stspin820_Board_Enable(void)
Davidroid 2:4fd08b67958c 593 {
Davidroid 2:4fd08b67958c 594 GPIO_InitTypeDef GPIO_InitStruct;
Davidroid 2:4fd08b67958c 595 if (HAL_GPIO_ReadPin(BSP_MOTOR_CONTROL_BOARD_PORT_EN_AND_FAULT,\
Davidroid 2:4fd08b67958c 596 BSP_MOTOR_CONTROL_BOARD_PIN_EN_AND_FAULT) == 0)
Davidroid 2:4fd08b67958c 597 {
Davidroid 2:4fd08b67958c 598 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_EN_AND_FAULT,\
Davidroid 2:4fd08b67958c 599 BSP_MOTOR_CONTROL_BOARD_PIN_EN_AND_FAULT,\
Davidroid 2:4fd08b67958c 600 GPIO_PIN_SET);
Davidroid 2:4fd08b67958c 601 HAL_Delay(BRIDGE_TURN_ON_DELAY);
Davidroid 2:4fd08b67958c 602 /* Configure the GPIO connected to EN pin to take interrupt */
Davidroid 2:4fd08b67958c 603 GPIO_InitStruct.Pin = BSP_MOTOR_CONTROL_BOARD_PIN_EN_AND_FAULT;
Davidroid 2:4fd08b67958c 604 GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
Davidroid 2:4fd08b67958c 605 GPIO_InitStruct.Pull = GPIO_PULLUP;
Davidroid 2:4fd08b67958c 606 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
Davidroid 2:4fd08b67958c 607 HAL_GPIO_Init(BSP_MOTOR_CONTROL_BOARD_PORT_EN_AND_FAULT, &GPIO_InitStruct);
Davidroid 2:4fd08b67958c 608 __HAL_GPIO_EXTI_CLEAR_IT(BSP_MOTOR_CONTROL_BOARD_PIN_EN_AND_FAULT);
Davidroid 2:4fd08b67958c 609 HAL_NVIC_ClearPendingIRQ(BSP_MOTOR_CONTROL_BOARD_IRQn_EN_AND_FAULT);
Davidroid 2:4fd08b67958c 610 HAL_NVIC_EnableIRQ(BSP_MOTOR_CONTROL_BOARD_IRQn_EN_AND_FAULT);
Davidroid 2:4fd08b67958c 611 }
Davidroid 2:4fd08b67958c 612 }
Davidroid 2:4fd08b67958c 613
Davidroid 2:4fd08b67958c 614 /******************************************************//**
Davidroid 2:4fd08b67958c 615 * @brief Returns the EN FAULT pin state.
Davidroid 2:4fd08b67958c 616 * @retval The EN FAULT pin value.
Davidroid 2:4fd08b67958c 617 **********************************************************/
Davidroid 2:4fd08b67958c 618 uint32_t Stspin820_Board_EN_AND_FAULT_PIN_GetState(void)
Davidroid 2:4fd08b67958c 619 {
Davidroid 2:4fd08b67958c 620 return HAL_GPIO_ReadPin(BSP_MOTOR_CONTROL_BOARD_PORT_EN_AND_FAULT, BSP_MOTOR_CONTROL_BOARD_PIN_EN_AND_FAULT);
Davidroid 2:4fd08b67958c 621 }
Davidroid 2:4fd08b67958c 622
Davidroid 2:4fd08b67958c 623 /******************************************************//**
Davidroid 2:4fd08b67958c 624 * @brief Select the STSPIN820 mode1, mode2 and mode3 pins levels.
Davidroid 2:4fd08b67958c 625 * @param[in] modePin1Level level of the mode1 gpio (0 low, 1+ high)
Davidroid 2:4fd08b67958c 626 * @param[in] modePin2Level level of the mode2 gpio (0 low, 1+ high)
Davidroid 2:4fd08b67958c 627 * @param[in] modePin3Level level of the mode3 gpio (0 low, 1+ high)
Davidroid 2:4fd08b67958c 628 * @retval 1
Davidroid 2:4fd08b67958c 629 **********************************************************/
Davidroid 2:4fd08b67958c 630 uint8_t Stspin820_Board_SetModePins(uint8_t modePin1Level,\
Davidroid 2:4fd08b67958c 631 uint8_t modePin2Level,\
Davidroid 2:4fd08b67958c 632 uint8_t modePin3Level)
Davidroid 2:4fd08b67958c 633 {
Davidroid 2:4fd08b67958c 634
Davidroid 2:4fd08b67958c 635
Davidroid 2:4fd08b67958c 636 if (modePin1Level != 0)
Davidroid 2:4fd08b67958c 637 {
Davidroid 2:4fd08b67958c 638 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_MODE1,\
Davidroid 2:4fd08b67958c 639 BSP_MOTOR_CONTROL_BOARD_PIN_MODE1,\
Davidroid 2:4fd08b67958c 640 GPIO_PIN_SET);
Davidroid 2:4fd08b67958c 641 }
Davidroid 2:4fd08b67958c 642 else
Davidroid 2:4fd08b67958c 643 {
Davidroid 2:4fd08b67958c 644 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_MODE1,\
Davidroid 2:4fd08b67958c 645 BSP_MOTOR_CONTROL_BOARD_PIN_MODE1,\
Davidroid 2:4fd08b67958c 646 GPIO_PIN_RESET);
Davidroid 2:4fd08b67958c 647 }
Davidroid 2:4fd08b67958c 648
Davidroid 2:4fd08b67958c 649 if (modePin2Level != 0)
Davidroid 2:4fd08b67958c 650 {
Davidroid 2:4fd08b67958c 651 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_MODE2,\
Davidroid 2:4fd08b67958c 652 BSP_MOTOR_CONTROL_BOARD_PIN_MODE2,\
Davidroid 2:4fd08b67958c 653 GPIO_PIN_SET);
Davidroid 2:4fd08b67958c 654 }
Davidroid 2:4fd08b67958c 655 else
Davidroid 2:4fd08b67958c 656 {
Davidroid 2:4fd08b67958c 657 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_MODE2,\
Davidroid 2:4fd08b67958c 658 BSP_MOTOR_CONTROL_BOARD_PIN_MODE2,\
Davidroid 2:4fd08b67958c 659 GPIO_PIN_RESET);
Davidroid 2:4fd08b67958c 660 }
Davidroid 2:4fd08b67958c 661
Davidroid 2:4fd08b67958c 662 if (modePin3Level != 0)
Davidroid 2:4fd08b67958c 663 {
Davidroid 2:4fd08b67958c 664 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_MODE3,\
Davidroid 2:4fd08b67958c 665 BSP_MOTOR_CONTROL_BOARD_PIN_MODE3,\
Davidroid 2:4fd08b67958c 666 GPIO_PIN_SET);
Davidroid 2:4fd08b67958c 667 }
Davidroid 2:4fd08b67958c 668 else
Davidroid 2:4fd08b67958c 669 {
Davidroid 2:4fd08b67958c 670 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_MODE3,\
Davidroid 2:4fd08b67958c 671 BSP_MOTOR_CONTROL_BOARD_PIN_MODE3,\
Davidroid 2:4fd08b67958c 672 GPIO_PIN_RESET);
Davidroid 2:4fd08b67958c 673 }
Davidroid 2:4fd08b67958c 674
Davidroid 2:4fd08b67958c 675 return 1;
Davidroid 2:4fd08b67958c 676 }
Davidroid 2:4fd08b67958c 677
Davidroid 2:4fd08b67958c 678 /******************************************************//**
Davidroid 2:4fd08b67958c 679 * @brief Select Full Step mode
Davidroid 2:4fd08b67958c 680 * @retval None
Davidroid 2:4fd08b67958c 681 **********************************************************/
Davidroid 2:4fd08b67958c 682 void Stspin820_Board_SetFullStep(void)
Davidroid 2:4fd08b67958c 683 {
Davidroid 2:4fd08b67958c 684 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_MODE1,\
Davidroid 2:4fd08b67958c 685 BSP_MOTOR_CONTROL_BOARD_PIN_MODE1,\
Davidroid 2:4fd08b67958c 686 GPIO_PIN_RESET);
Davidroid 2:4fd08b67958c 687 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_MODE2,\
Davidroid 2:4fd08b67958c 688 BSP_MOTOR_CONTROL_BOARD_PIN_MODE2,\
Davidroid 2:4fd08b67958c 689 GPIO_PIN_RESET);
Davidroid 2:4fd08b67958c 690 HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_PORT_MODE3,\
Davidroid 2:4fd08b67958c 691 BSP_MOTOR_CONTROL_BOARD_PIN_MODE3,\
Davidroid 2:4fd08b67958c 692 GPIO_PIN_RESET);
Davidroid 2:4fd08b67958c 693 }
Davidroid 2:4fd08b67958c 694
Davidroid 2:4fd08b67958c 695 /**
Davidroid 2:4fd08b67958c 696 * @}
Davidroid 2:4fd08b67958c 697 */
Davidroid 2:4fd08b67958c 698
Davidroid 2:4fd08b67958c 699 /**
Davidroid 2:4fd08b67958c 700 * @}
Davidroid 2:4fd08b67958c 701 */
Davidroid 2:4fd08b67958c 702
Davidroid 2:4fd08b67958c 703 /**
Davidroid 2:4fd08b67958c 704 * @}
Davidroid 2:4fd08b67958c 705 */
Davidroid 2:4fd08b67958c 706
Davidroid 2:4fd08b67958c 707 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Davidroid 2:4fd08b67958c 708 #endif