void pwmout_init(pwmout_t* obj, PinName pin) { // Get the peripheral name from the pin and assign it to the object obj->pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM); MBED_ASSERT(obj->pwm != (PWMName)NC); // Get the functions (timer channel, (non)inverted) from the pin and assign it to the object uint32_t function = pinmap_function(pin, PinMap_PWM); MBED_ASSERT(function != (uint32_t)NC); obj->channel = STM_PIN_CHANNEL(function); obj->inverted = STM_PIN_INVERTED(function); // Enable TIM clock if (obj->pwm == PWM_1) __HAL_RCC_TIM1_CLK_ENABLE(); if (obj->pwm == PWM_2) __HAL_RCC_TIM2_CLK_ENABLE(); if (obj->pwm == PWM_3) __HAL_RCC_TIM3_CLK_ENABLE(); if (obj->pwm == PWM_4) __HAL_RCC_TIM4_CLK_ENABLE(); if (obj->pwm == PWM_8) __HAL_RCC_TIM8_CLK_ENABLE(); if (obj->pwm == PWM_9) __HAL_RCC_TIM9_CLK_ENABLE(); if (obj->pwm == PWM_10) __HAL_RCC_TIM10_CLK_ENABLE(); if (obj->pwm == PWM_11) __HAL_RCC_TIM11_CLK_ENABLE(); if (obj->pwm == PWM_12) __HAL_RCC_TIM12_CLK_ENABLE(); if (obj->pwm == PWM_13) __HAL_RCC_TIM13_CLK_ENABLE(); if (obj->pwm == PWM_14) __HAL_RCC_TIM14_CLK_ENABLE(); // Configure GPIO pinmap_pinout(pin, PinMap_PWM); obj->pin = pin; obj->period = 0; obj->pulse = 0; obj->prescaler = 1; pwmout_period_us(obj, 20000); // 20 ms per default }
/** * @brief TIM MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - Peripheral's GPIO Configuration * @param htim: TIM handle pointer * @retval None */ void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /*##-1- Enable peripherals and GPIO Clocks #################################*/ /* TIM1 Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /* Enable GPIO Channels Clock */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); /*##-2- Configure I/Os #####################################################*/ /* Common configuration for all channels */ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; /* Channel 1 configuration */ GPIO_InitStruct.Pin = GPIO_PIN_8; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* Channel 2 configuration */ GPIO_InitStruct.Pin = GPIO_PIN_11; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); }
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { if(htim_base->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspInit 0 */ /* USER CODE END TIM1_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /* USER CODE BEGIN TIM1_MspInit 1 */ HAL_NVIC_SetPriority(TIM1_CC_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM1_CC_IRQn); /* USER CODE END TIM1_MspInit 1 */ } else if(htim_base->Instance==TIM3) { /* USER CODE BEGIN TIM3_MspInit 0 */ /* USER CODE END TIM3_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM3_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM3_IRQn, 1, 1); HAL_NVIC_EnableIRQ(TIM3_IRQn); /* USER CODE BEGIN TIM3_MspInit 1 */ /* USER CODE END TIM3_MspInit 1 */ } }
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) { if(tim_baseHandle->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspInit 0 */ /* USER CODE END TIM1_MspInit 0 */ /* TIM1 clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /* TIM1 interrupt Init */ HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn); /* USER CODE BEGIN TIM1_MspInit 1 */ /* USER CODE END TIM1_MspInit 1 */ } else if(tim_baseHandle->Instance==TIM13) { /* USER CODE BEGIN TIM13_MspInit 0 */ /* USER CODE END TIM13_MspInit 0 */ /* TIM13 clock enable */ __HAL_RCC_TIM13_CLK_ENABLE(); /* TIM13 interrupt Init */ HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn); /* USER CODE BEGIN TIM13_MspInit 1 */ /* USER CODE END TIM13_MspInit 1 */ } }
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM1) { __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_TIM1_CLK_ENABLE(); initGPIO_PWM(); } }
/** * @brief TIM MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - Peripheral's GPIO Configuration * @param htim: TIM handle pointer * @retval None */ void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /*##-1- Enable peripherals and GPIO Clocks #################################*/ /* TIMx Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /* Enable GPIO Channels Clock */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); /* Configure (PA.08, TIM1_CH1), (PA.07, TIM1_CH1N), (PA.09, TIM1_CH2), (PB.00, TIM1_CH2N), (PE.13, TIM1_CH3), (PB.01, TIM1_CH3N), (PA.06, TIM1_BKIN) in push-pull, alternate function mode */ /* Common configuration for all channels */ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; /* GPIO TIM1_Channel1 configuration */ GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_8; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* GPIO TIM1_Channel1N configuration */ GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_7; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* GPIO TIM1_Channel2 configuration */ GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_9; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* GPIO TIM1_Channel2N configuration */ GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_0; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* GPIO TIM1_Channel3 configuration */ GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_13; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /* GPIO TIM1_Channel3N configuration */ GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_1; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* GPIO TIM1_BKIN configuration */ GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_6; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* Enable the TIM1 global Interrupt & set priority */ HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM11_IRQn, 0, 1); HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM11_IRQn); }
/** * @brief TIM MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - Peripheral's GPIO Configuration * @param htim: TIM handle pointer * @retval None */ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /* Enable TIM1, TIM3 & TIM4 clocks */ __HAL_RCC_TIM1_CLK_ENABLE(); __HAL_RCC_TIM3_CLK_ENABLE(); __HAL_RCC_TIM4_CLK_ENABLE(); /* Enable GPIOA, GPIOB & GPIOC Clocks */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); /* Configure PA.8 (TIM1_Channel1), PC.6 (TIM3_Channel1) and PB.6 (TIM4_Channel1), in push-pull, alternate function mode */ GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; GPIO_InitStruct.Pin = GPIO_PIN_6; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; GPIO_InitStruct.Pin = GPIO_PIN_6; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); }
/** * @brief TIM MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - Peripheral's GPIO Configuration * @param htim: TIM handle pointer * @retval None */ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /*##-1- Enable peripherals and GPIO Clocks #################################*/ /* TIMx Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /* Enable GPIO Channels Clock */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); /* Configure (PA.08, TIM1_CH1), (PB.13, TIM1_CH1N), (PE.11, TIM1_CH2), (PB.14, TIM1_CH2N), (PA.10, TIM1_CH3), (PB.15, TIM1_CH3N), (PA.06, TIM1_BKIN) in push-pull, alternate function mode */ /* Common configuration for all channels */ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; /* GPIO TIM1_Channel1 configuration */ GPIO_InitStruct.Alternate = GPIO_AF6_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_8; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* GPIO TIM1_Channel1N configuration */ GPIO_InitStruct.Alternate = GPIO_AF6_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_13; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* GPIO TIM1_Channel2 configuration */ GPIO_InitStruct.Alternate = GPIO_AF2_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_11; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /* GPIO TIM1_Channel2N configuration */ GPIO_InitStruct.Alternate = GPIO_AF6_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_14; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* GPIO TIM1_Channel3 configuration */ GPIO_InitStruct.Alternate = GPIO_AF6_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_10; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* GPIO TIM1_Channel3N configuration */ GPIO_InitStruct.Alternate = GPIO_AF4_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_15; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* GPIO TIM1_BKIN configuration */ GPIO_InitStruct.Alternate = GPIO_AF6_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_6; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); }
/** * @brief TIM MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - Peripheral's GPIO Configuration * @param htim: TIM handle pointer * @retval None */ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /*##-1- Enable peripherals and GPIO Clocks #################################*/ /* TIM1 Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /* Enable GPIO Port Clocks */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); /*##-2- Configure I/Os #####################################################*/ /* Configure PA.8 (TIM1_Channel1), PE.11 (TIM1_Channel2), PA.10 (TIM1_Channel3), PE.14 (TIM1_Channel4), PB.13 (TIM1_Channel1N), PB.14 (TIM1_Channel2N) & PB.15 (TIM1_Channel3N) in output, push-pull, alternate function mode */ /* Common configuration for all channels */ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; /* Channel 1 output */ GPIO_InitStruct.Pin = GPIO_PIN_8; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* Channel 1 complementary output */ GPIO_InitStruct.Pin = GPIO_PIN_13; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* Channel 2 output */ GPIO_InitStruct.Pin = GPIO_PIN_11; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /* Channel 2 complementary output */ GPIO_InitStruct.Pin = GPIO_PIN_14; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* Channel 3 output */ GPIO_InitStruct.Pin = GPIO_PIN_10; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* Channel 3 complementary output */ GPIO_InitStruct.Pin = GPIO_PIN_15; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* Channel 4 output */ GPIO_InitStruct.Pin = GPIO_PIN_14; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); }
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle) { if(tim_pwmHandle->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspInit 0 */ /* USER CODE END TIM1_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /* USER CODE BEGIN TIM1_MspInit 1 */ /* USER CODE END TIM1_MspInit 1 */ } }
/** * @brief This function configures the TIM1 as a time base source. * The time source is configured to have 1ms time base with a dedicated * Tick interrupt priority. * @note This function is called automatically at the beginning of program after * reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig(). * @param TickPriority: Tick interrupt priorty. * @retval HAL status */ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { RCC_ClkInitTypeDef clkconfig; uint32_t uwTimclock = 0; uint32_t uwPrescalerValue = 0; uint32_t pFLatency; /*Configure the TIM1 IRQ priority */ HAL_NVIC_SetPriority(TIM1_UP_TIM16_IRQn, TickPriority ,0); /* Enable the TIM1 global Interrupt */ HAL_NVIC_EnableIRQ(TIM1_UP_TIM16_IRQn); /* Enable TIM1 clock */ __HAL_RCC_TIM1_CLK_ENABLE(); /* Get clock configuration */ HAL_RCC_GetClockConfig(&clkconfig, &pFLatency); /* Compute TIM1 clock */ uwTimclock = HAL_RCC_GetPCLK2Freq(); /* Compute the prescaler value to have TIM1 counter clock equal to 1MHz */ uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000) - 1); /* Initialize TIM1 */ htim1.Instance = TIM1; /* Initialize TIMx peripheral as follow: + Period = [(TIM1CLK/1000) - 1]. to have a (1/1000) s time base. + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock. + ClockDivision = 0 + Counter direction = Up */ htim1.Init.Period = (1000000 / 1000) - 1; htim1.Init.Prescaler = uwPrescalerValue; htim1.Init.ClockDivision = 0; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; if(HAL_TIM_Base_Init(&htim1) == HAL_OK) { /* Start the TIM time Base generation in interrupt mode */ return HAL_TIM_Base_Start_IT(&htim1); } /* Return function status */ return HAL_ERROR; }
/** * @brief TIM MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - Peripheral's GPIO Configuration * @param htim: TIM handle pointer * @retval None */ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /*##-1- Enable peripherals and GPIO Clocks #################################*/ /* TIMx Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /* Enable GPIO Channels Clock */ __HAL_RCC_GPIOA_CLK_ENABLE(); /* Configure (PA.08, TIM1_CH1), (PA.09, TIM1_CH2) and (PA.10, TIM1_CH3) in output, push-pull, alternate function mode */ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_AF6_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); }
void pwmout_init(pwmout_t* obj, PinName pin) { // Get the peripheral name from the pin and assign it to the object obj->pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM); MBED_ASSERT(obj->pwm != (PWMName)NC); // Get the pin function and assign the used channel to the object uint32_t function = pinmap_function(pin, PinMap_PWM); MBED_ASSERT(function != (uint32_t)NC); obj->channel = STM_PIN_CHANNEL(function); obj->inverted = STM_PIN_INVERTED(function); // Enable TIM clock if (obj->pwm == PWM_1) __HAL_RCC_TIM1_CLK_ENABLE(); if (obj->pwm == PWM_2) __HAL_RCC_TIM2_CLK_ENABLE(); #if defined(TIM3_BASE) if (obj->pwm == PWM_3) __HAL_RCC_TIM3_CLK_ENABLE(); #endif #if defined(TIM4_BASE) if (obj->pwm == PWM_4) __HAL_RCC_TIM4_CLK_ENABLE(); #endif #if defined(TIM5_BASE) if (obj->pwm == PWM_5) __HAL_RCC_TIM5_CLK_ENABLE(); #endif #if defined(TIM8_BASE) if (obj->pwm == PWM_8) __HAL_RCC_TIM8_CLK_ENABLE(); #endif if (obj->pwm == PWM_15) __HAL_RCC_TIM15_CLK_ENABLE(); if (obj->pwm == PWM_16) __HAL_RCC_TIM16_CLK_ENABLE(); #if defined(TIM17_BASE) if (obj->pwm == PWM_17) __HAL_RCC_TIM17_CLK_ENABLE(); #endif // Configure GPIO pinmap_pinout(pin, PinMap_PWM); obj->pin = pin; obj->period = 0; obj->pulse = 0; obj->prescaler = 1; pwmout_period_us(obj, 20000); // 20 ms per default }
void MX_TIM1_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig; TIM_MasterConfigTypeDef sMasterConfig; __HAL_RCC_TIM1_CLK_ENABLE(); htim1.Instance = TIM1; htim1.Init.Prescaler = 41999; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 1999; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(&htim1); sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig); sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig); }
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle) { if(tim_pwmHandle->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspInit 0 */ /* USER CODE END TIM1_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM1_BRK_TIM9_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM1_BRK_TIM9_IRQn); HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM11_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM11_IRQn); /* USER CODE BEGIN TIM1_MspInit 1 */ /* USER CODE END TIM1_MspInit 1 */ } }
/** * @brief TIM MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - Peripheral's GPIO Configuration * @param htim: TIM handle pointer * @retval None */ void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /*##-1- Enable peripherals and GPIO Clocks #################################*/ /* TIMs Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); __HAL_RCC_TIM4_CLK_ENABLE(); __HAL_RCC_TIM5_CLK_ENABLE(); /* Enable GPIO Channels Clock */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /*##-2- Configure I/Os #####################################################*/ /* Configure PA.08 (TIM1_Channel1), PA.09 (TIM1_Channel2), PB.06 (TIM4_Channel1), PA.00 (TIM5_Channel1) in output, pull-down, alternate function mode */ /* Common configuration for all channels */ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_8; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_9; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; GPIO_InitStruct.Pin = GPIO_PIN_6; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_InitStruct.Alternate = GPIO_AF2_TIM4; GPIO_InitStruct.Pin = GPIO_PIN_0; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); }
/** * @brief TIM MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - Peripheral's GPIO Configuration * @param htim: TIM handle pointer * @retval None */ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /*##-1- Enable peripherals and GPIO Clocks #################################*/ /* TIMx Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /* Enable all GPIO Channels Clock requested */ __HAL_RCC_GPIOE_CLK_ENABLE(); /* Configure PB.04 (pin 19 in CN7 connector) (TIM3_Channel1), PB.05 (pin 13 in CN7 connector) (TIM3_Channel2), PB.00 (pin 31 in CN10 connector) (TIM3_Channel3), PB.01 (pin 7 in CN10 connector) (TIM3_Channel4) in output, push-pull, alternate function mode */ /* Common configuration for all channels */ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_11 | GPIO_PIN_13 | GPIO_PIN_14; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); }
/** * @brief TIM Encoder MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - Peripheral's GPIO Configuration * @param htim: TIM handle pointer * @retval None */ void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /* Enable TIM1 clock */ __HAL_RCC_TIM1_CLK_ENABLE(); /* Enable TIM1 GPIOs Clock */ __HAL_RCC_GPIOA_CLK_ENABLE(); /* Configure PA.08 (TIM1_Channel1) and PA.09 (TIM1_Channel2), in push-pull, alternate function mode */ GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; GPIO_InitStruct.Pin = GPIO_PIN_9; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); }
/*====================================================================================================*/ void TIM_PWM_Config( void ) { GPIO_InitTypeDef GPIO_InitStruct; TIM_HandleTypeDef TIM_InitStruct; TIM_OC_InitTypeDef TIM_OC_InitStruct; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_TIM1_CLK_ENABLE(); GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Pin = GPIO_PIN_8; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* TIM1 use APB2 = 72 MHz */ TIM_InitStruct.Instance = TIM1; TIM_InitStruct.Init.Prescaler = 720 - 1; // 72 MHz / 720 = 1 MHz TIM_InitStruct.Init.Period = PWM_MAX - 1; // PWM Freq = 10 kHz TIM_InitStruct.Init.ClockDivision = 0; TIM_InitStruct.Init.CounterMode = TIM_COUNTERMODE_UP; TIM_InitStruct.Init.RepetitionCounter = 0; HAL_TIM_PWM_Init(&TIM_InitStruct); TIM_OC_InitStruct.OCMode = TIM_OCMODE_PWM2; TIM_OC_InitStruct.OCFastMode = TIM_OCFAST_DISABLE; TIM_OC_InitStruct.OCPolarity = TIM_OCPOLARITY_LOW; TIM_OC_InitStruct.OCNPolarity = TIM_OCNPOLARITY_HIGH; TIM_OC_InitStruct.OCIdleState = TIM_OCIDLESTATE_SET; TIM_OC_InitStruct.OCNIdleState= TIM_OCNIDLESTATE_RESET; TIM_OC_InitStruct.Pulse = PWM_MED; HAL_TIM_PWM_ConfigChannel(&TIM_InitStruct, &TIM_OC_InitStruct, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&TIM_InitStruct, TIM_CHANNEL_1); }
/** * @brief TIM MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - Peripheral's GPIO Configuration * @param htim: TIM handle pointer * @retval None */ void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /*##-1- Enable peripherals and GPIO Clocks #################################*/ /* TIM1 Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /* Enable GPIO Port Clocks */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); /*##-2- Configure I/Os #####################################################*/ /* Configure PA.8 (TIM1_Channel1), PE.11 (TIM1_Channel2), PA.10 (TIM1_Channel3), PE.14 (TIM1_Channel4), PB.13 (TIM1_Channel1N), PB.14 (TIM1_Channel2N), PB.15 (TIM1_Channel3N) & PB.12 (TIM1_BREAK) in output, push-pull, pull-down & alternate function mode */ /* Common configuration for all channels */ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; /* Channel 1 output */ GPIO_InitStruct.Pin = GPIO_PIN_8; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* Channel 1 complementary output */ GPIO_InitStruct.Pin = GPIO_PIN_13; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* Channel 2 output */ GPIO_InitStruct.Pin = GPIO_PIN_11; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /* Channel 2 complementary output */ GPIO_InitStruct.Pin = GPIO_PIN_14; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* Channel 3 output */ GPIO_InitStruct.Pin = GPIO_PIN_13; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /* Channel 3 complementary output */ GPIO_InitStruct.Pin = GPIO_PIN_15; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* TIM1 break input */ GPIO_InitStruct.Pin = GPIO_PIN_12; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* Enable the TIM1 global Interrupt & set priority */ HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM11_IRQn, 0, 1); HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM11_IRQn); }
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { if(htim_base->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspInit 0 */ /* USER CODE END TIM1_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn); /* USER CODE BEGIN TIM1_MspInit 1 */ /* USER CODE END TIM1_MspInit 1 */ } else if(htim_base->Instance==TIM2) { /* USER CODE BEGIN TIM2_MspInit 0 */ /* USER CODE END TIM2_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM2_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM2_IRQn); /* USER CODE BEGIN TIM2_MspInit 1 */ /* USER CODE END TIM2_MspInit 1 */ } else if(htim_base->Instance==TIM3) { /* USER CODE BEGIN TIM3_MspInit 0 */ /* USER CODE END TIM3_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM3_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM3_IRQn); /* USER CODE BEGIN TIM3_MspInit 1 */ /* USER CODE END TIM3_MspInit 1 */ } else if(htim_base->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspInit 0 */ /* USER CODE END TIM4_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM4_IRQn); /* USER CODE BEGIN TIM4_MspInit 1 */ /* USER CODE END TIM4_MspInit 1 */ } else if(htim_base->Instance==TIM5) { /* USER CODE BEGIN TIM5_MspInit 0 */ /* USER CODE END TIM5_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM5_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM5_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM5_IRQn); /* USER CODE BEGIN TIM5_MspInit 1 */ /* USER CODE END TIM5_MspInit 1 */ } else if(htim_base->Instance==TIM6) { /* USER CODE BEGIN TIM6_MspInit 0 */ /* USER CODE END TIM6_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM6_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); /* USER CODE BEGIN TIM6_MspInit 1 */ /* USER CODE END TIM6_MspInit 1 */ } else if(htim_base->Instance==TIM7) { /* USER CODE BEGIN TIM7_MspInit 0 */ /* USER CODE END TIM7_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM7_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM7_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM7_IRQn); /* USER CODE BEGIN TIM7_MspInit 1 */ /* USER CODE END TIM7_MspInit 1 */ } else if(htim_base->Instance==TIM8) { /* USER CODE BEGIN TIM8_MspInit 0 */ /* USER CODE END TIM8_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM8_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn); /* USER CODE BEGIN TIM8_MspInit 1 */ /* USER CODE END TIM8_MspInit 1 */ } }
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { GPIO_InitTypeDef GPIO_InitStruct; if(htim_base->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspInit 0 */ /* USER CODE END TIM1_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); /**TIM1 GPIO Configuration PE9 ------> TIM1_CH1 PE11 ------> TIM1_CH2 PE13 ------> TIM1_CH3 PE14 ------> TIM1_CH4 */ GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_13|GPIO_PIN_14; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /* USER CODE BEGIN TIM1_MspInit 1 */ /* USER CODE END TIM1_MspInit 1 */ } else if(htim_base->Instance==TIM2) { /* USER CODE BEGIN TIM2_MspInit 0 */ /* USER CODE END TIM2_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM2_CLK_ENABLE(); /* USER CODE BEGIN TIM2_MspInit 1 */ /* USER CODE END TIM2_MspInit 1 */ } else if(htim_base->Instance==TIM3) { /* USER CODE BEGIN TIM3_MspInit 0 */ /* USER CODE END TIM3_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM3_CLK_ENABLE(); /* USER CODE BEGIN TIM3_MspInit 1 */ /* USER CODE END TIM3_MspInit 1 */ } else if(htim_base->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspInit 0 */ /* USER CODE END TIM4_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /* USER CODE BEGIN TIM4_MspInit 1 */ /* USER CODE END TIM4_MspInit 1 */ } }
void enableGPIOPowerUsageAndNoiseReductions(void) { // AHB1 __HAL_RCC_BKPSRAM_CLK_ENABLE(); __HAL_RCC_DTCMRAMEN_CLK_ENABLE(); __HAL_RCC_DMA2_CLK_ENABLE(); __HAL_RCC_USB_OTG_HS_CLK_ENABLE(); __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOI_CLK_ENABLE(); #ifndef STM32F722xx __HAL_RCC_DMA2D_CLK_ENABLE(); __HAL_RCC_GPIOJ_CLK_ENABLE(); __HAL_RCC_GPIOK_CLK_ENABLE(); #endif //APB1 __HAL_RCC_TIM2_CLK_ENABLE(); __HAL_RCC_TIM3_CLK_ENABLE(); __HAL_RCC_TIM4_CLK_ENABLE(); __HAL_RCC_TIM5_CLK_ENABLE(); __HAL_RCC_TIM6_CLK_ENABLE(); __HAL_RCC_TIM7_CLK_ENABLE(); __HAL_RCC_TIM12_CLK_ENABLE(); __HAL_RCC_TIM13_CLK_ENABLE(); __HAL_RCC_TIM14_CLK_ENABLE(); __HAL_RCC_LPTIM1_CLK_ENABLE(); __HAL_RCC_SPI2_CLK_ENABLE(); __HAL_RCC_SPI3_CLK_ENABLE(); __HAL_RCC_USART2_CLK_ENABLE(); __HAL_RCC_USART3_CLK_ENABLE(); __HAL_RCC_UART4_CLK_ENABLE(); __HAL_RCC_UART5_CLK_ENABLE(); __HAL_RCC_I2C1_CLK_ENABLE(); __HAL_RCC_I2C2_CLK_ENABLE(); __HAL_RCC_I2C3_CLK_ENABLE(); __HAL_RCC_CAN1_CLK_ENABLE(); __HAL_RCC_DAC_CLK_ENABLE(); __HAL_RCC_UART7_CLK_ENABLE(); __HAL_RCC_UART8_CLK_ENABLE(); #ifndef STM32F722xx __HAL_RCC_I2C4_CLK_ENABLE(); __HAL_RCC_CAN2_CLK_ENABLE(); __HAL_RCC_CEC_CLK_ENABLE(); #endif //APB2 __HAL_RCC_TIM1_CLK_ENABLE(); __HAL_RCC_TIM8_CLK_ENABLE(); __HAL_RCC_USART1_CLK_ENABLE(); __HAL_RCC_USART6_CLK_ENABLE(); __HAL_RCC_ADC1_CLK_ENABLE(); __HAL_RCC_ADC2_CLK_ENABLE(); __HAL_RCC_ADC3_CLK_ENABLE(); __HAL_RCC_SDMMC1_CLK_ENABLE(); __HAL_RCC_SPI1_CLK_ENABLE(); __HAL_RCC_SPI4_CLK_ENABLE(); __HAL_RCC_TIM9_CLK_ENABLE(); __HAL_RCC_TIM10_CLK_ENABLE(); __HAL_RCC_TIM11_CLK_ENABLE(); __HAL_RCC_SPI5_CLK_ENABLE(); __HAL_RCC_SAI1_CLK_ENABLE(); __HAL_RCC_SAI2_CLK_ENABLE(); #ifndef STM32F722xx __HAL_RCC_SPI6_CLK_ENABLE(); #endif // // GPIO_InitTypeDef GPIO_InitStructure; // GPIO_StructInit(&GPIO_InitStructure); // GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // default is un-pulled input // // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; // GPIO_InitStructure.GPIO_Pin &= ~(GPIO_Pin_11 | GPIO_Pin_12); // leave USB D+/D- alone // // GPIO_InitStructure.GPIO_Pin &= ~(GPIO_Pin_13 | GPIO_Pin_14); // leave JTAG pins alone // GPIO_Init(GPIOA, &GPIO_InitStructure); // // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; // GPIO_Init(GPIOB, &GPIO_InitStructure); // // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; // GPIO_Init(GPIOC, &GPIO_InitStructure); // GPIO_Init(GPIOD, &GPIO_InitStructure); // GPIO_Init(GPIOE, &GPIO_InitStructure); }
void MX_TIM_Init(void) { __HAL_RCC_TIM1_CLK_ENABLE(); __HAL_RCC_TIM8_CLK_ENABLE(); TIM_MasterConfigTypeDef sMasterConfig; TIM_OC_InitTypeDef sConfigOC; TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig; TIM_SlaveConfigTypeDef sTimConfig; htim_right.Instance = RIGHT_TIM; htim_right.Init.Prescaler = 0; htim_right.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED1; htim_right.Init.Period = 64000000 / 2 / PWM_FREQ; htim_right.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim_right.Init.RepetitionCounter = 0; htim_right.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; HAL_TIM_PWM_Init(&htim_right); sMasterConfig.MasterOutputTrigger = TIM_TRGO_ENABLE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&htim_right, &sMasterConfig); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_SET; HAL_TIM_PWM_ConfigChannel(&htim_right, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_ConfigChannel(&htim_right, &sConfigOC, TIM_CHANNEL_2); HAL_TIM_PWM_ConfigChannel(&htim_right, &sConfigOC, TIM_CHANNEL_3); sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_ENABLE; sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_ENABLE; sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; sBreakDeadTimeConfig.DeadTime = DEAD_TIME; sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_LOW; sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; HAL_TIMEx_ConfigBreakDeadTime(&htim_right, &sBreakDeadTimeConfig); htim_left.Instance = LEFT_TIM; htim_left.Init.Prescaler = 0; htim_left.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED1; htim_left.Init.Period = 64000000 / 2 / PWM_FREQ; htim_left.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim_left.Init.RepetitionCounter = 0; htim_left.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; HAL_TIM_PWM_Init(&htim_left); sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE; HAL_TIMEx_MasterConfigSynchronization(&htim_left, &sMasterConfig); sTimConfig.InputTrigger = TIM_TS_ITR0; sTimConfig.SlaveMode = TIM_SLAVEMODE_GATED; HAL_TIM_SlaveConfigSynchronization(&htim_left, &sTimConfig); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_SET; HAL_TIM_PWM_ConfigChannel(&htim_left, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_ConfigChannel(&htim_left, &sConfigOC, TIM_CHANNEL_2); HAL_TIM_PWM_ConfigChannel(&htim_left, &sConfigOC, TIM_CHANNEL_3); sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_ENABLE; sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_ENABLE; sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; sBreakDeadTimeConfig.DeadTime = DEAD_TIME; sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_LOW; sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; HAL_TIMEx_ConfigBreakDeadTime(&htim_left, &sBreakDeadTimeConfig); LEFT_TIM->BDTR &= ~TIM_BDTR_MOE; RIGHT_TIM->BDTR &= ~TIM_BDTR_MOE; HAL_TIM_PWM_Start(&htim_left, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim_left, TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim_left, TIM_CHANNEL_3); HAL_TIMEx_PWMN_Start(&htim_left, TIM_CHANNEL_1); HAL_TIMEx_PWMN_Start(&htim_left, TIM_CHANNEL_2); HAL_TIMEx_PWMN_Start(&htim_left, TIM_CHANNEL_3); HAL_TIM_PWM_Start(&htim_right, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim_right, TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim_right, TIM_CHANNEL_3); HAL_TIMEx_PWMN_Start(&htim_right, TIM_CHANNEL_1); HAL_TIMEx_PWMN_Start(&htim_right, TIM_CHANNEL_2); HAL_TIMEx_PWMN_Start(&htim_right, TIM_CHANNEL_3); htim_left.Instance->RCR = 1; __HAL_TIM_ENABLE(&htim_right); }