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_2) __TIM2_CLK_ENABLE(); #if defined(TIM3_BASE) if (obj->pwm == PWM_3) __TIM3_CLK_ENABLE(); #endif if (obj->pwm == PWM_21) __TIM21_CLK_ENABLE(); #if defined(TIM22_BASE) if (obj->pwm == PWM_22) __TIM22_CLK_ENABLE(); #endif // Configure GPIO pinmap_pinout(pin, PinMap_PWM); obj->pin = pin; obj->period = 0; obj->pulse = 0; pwmout_period_us(obj, 20000); // 20 ms per default }
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); if (obj->pwm == (PWMName)NC) { error("PWM error: pinout mapping failed."); } // Enable TIM clock if (obj->pwm == PWM_2) __TIM2_CLK_ENABLE(); #if defined(TIM3_BASE) if (obj->pwm == PWM_3) __TIM3_CLK_ENABLE(); #endif if (obj->pwm == PWM_21) __TIM21_CLK_ENABLE(); if (obj->pwm == PWM_22) __TIM22_CLK_ENABLE(); // Configure GPIO pinmap_pinout(pin, PinMap_PWM); obj->pin = pin; obj->period = 0; obj->pulse = 0; pwmout_period_us(obj, 20000); // 20 ms per default }
void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* htim_base) { GPIO_InitTypeDef GPIO_InitStruct; if (htim_base->Instance == TIM21) { __TIM21_CLK_ENABLE(); /**TIM21 GPIO Configuration PB13 ------> TIM21_CH1 PB14 ------> TIM21_CH2 */ GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_LOW; GPIO_InitStruct.Alternate = GPIO_AF6_TIM21; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } }
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { GPIO_InitTypeDef GPIO_InitStruct; if(htim_base->Instance==TIM2) { __TIM2_CLK_ENABLE(); /**TIM1 GPIO Configuration PA0 ------> TIM2_CH1 */ GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Speed = GPIO_SPEED_LOW; GPIO_InitStruct.Alternate = GPIO_AF2_TIM2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } if(htim_base->Instance==TIM21) __TIM21_CLK_ENABLE(); }
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm) { GPIO_InitTypeDef GPIO_InitStruct; if(htim_pwm->Instance==TIM2) { /* USER CODE BEGIN TIM2_MspInit 0 */ /* USER CODE END TIM2_MspInit 0 */ /* Peripheral clock enable */ __TIM2_CLK_ENABLE(); /**TIM2 GPIO Configuration PA0 ------> TIM2_CH1 PA1 ------> TIM2_CH2 PB10 ------> TIM2_CH3 PB11 ------> TIM2_CH4 */ GPIO_InitStruct.Pin = fet_ctrl_3a_Pin|fet_ctrl_3b_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_LOW; GPIO_InitStruct.Alternate = GPIO_AF2_TIM2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = fet_ctrl_4a_Pin|fet_ctrl_4b_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_LOW; GPIO_InitStruct.Alternate = GPIO_AF2_TIM2; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* Peripheral DMA init*/ hdma_tim2_ch1.Instance = DMA1_Channel5; hdma_tim2_ch1.Init.Request = DMA_REQUEST_8; hdma_tim2_ch1.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_tim2_ch1.Init.PeriphInc = DMA_PINC_DISABLE; hdma_tim2_ch1.Init.MemInc = DMA_MINC_ENABLE; hdma_tim2_ch1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma_tim2_ch1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_tim2_ch1.Init.Mode = DMA_CIRCULAR; hdma_tim2_ch1.Init.Priority = DMA_PRIORITY_LOW; HAL_DMA_Init(&hdma_tim2_ch1); __HAL_LINKDMA(htim_pwm,hdma[TIM_DMA_ID_CC1],hdma_tim2_ch1); hdma_tim2_ch2.Instance = DMA1_Channel3; hdma_tim2_ch2.Init.Request = DMA_REQUEST_8; hdma_tim2_ch2.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_tim2_ch2.Init.PeriphInc = DMA_PINC_DISABLE; hdma_tim2_ch2.Init.MemInc = DMA_MINC_ENABLE; hdma_tim2_ch2.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma_tim2_ch2.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_tim2_ch2.Init.Mode = DMA_CIRCULAR; hdma_tim2_ch2.Init.Priority = DMA_PRIORITY_LOW; HAL_DMA_Init(&hdma_tim2_ch2); __HAL_LINKDMA(htim_pwm,hdma[TIM_DMA_ID_CC2],hdma_tim2_ch2); hdma_tim2_ch3.Instance = DMA1_Channel1; hdma_tim2_ch3.Init.Request = DMA_REQUEST_8; hdma_tim2_ch3.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_tim2_ch3.Init.PeriphInc = DMA_PINC_DISABLE; hdma_tim2_ch3.Init.MemInc = DMA_MINC_ENABLE; hdma_tim2_ch3.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma_tim2_ch3.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_tim2_ch3.Init.Mode = DMA_CIRCULAR; hdma_tim2_ch3.Init.Priority = DMA_PRIORITY_LOW; HAL_DMA_Init(&hdma_tim2_ch3); __HAL_LINKDMA(htim_pwm,hdma[TIM_DMA_ID_CC3],hdma_tim2_ch3); hdma_tim2_ch4.Instance = DMA1_Channel4; hdma_tim2_ch4.Init.Request = DMA_REQUEST_8; hdma_tim2_ch4.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_tim2_ch4.Init.PeriphInc = DMA_PINC_DISABLE; hdma_tim2_ch4.Init.MemInc = DMA_MINC_ENABLE; hdma_tim2_ch4.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma_tim2_ch4.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_tim2_ch4.Init.Mode = DMA_CIRCULAR; hdma_tim2_ch4.Init.Priority = DMA_PRIORITY_LOW; HAL_DMA_Init(&hdma_tim2_ch4); __HAL_LINKDMA(htim_pwm,hdma[TIM_DMA_ID_CC4],hdma_tim2_ch4); /* USER CODE BEGIN TIM2_MspInit 1 */ /* USER CODE END TIM2_MspInit 1 */ } else if(htim_pwm->Instance==TIM21) { /* USER CODE BEGIN TIM21_MspInit 0 */ /* USER CODE END TIM21_MspInit 0 */ /* Peripheral clock enable */ __TIM21_CLK_ENABLE(); /**TIM21 GPIO Configuration PB13 ------> TIM21_CH1 PB14 ------> TIM21_CH2 */ GPIO_InitStruct.Pin = dchg_ctrl_3_Pin|dchg_ctrl_4_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_LOW; GPIO_InitStruct.Alternate = GPIO_AF6_TIM21; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* USER CODE BEGIN TIM21_MspInit 1 */ /* USER CODE END TIM21_MspInit 1 */ } }