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 defined(TIM1_BASE) if (obj->pwm == PWM_1) __TIM1_CLK_ENABLE(); #endif #if defined(TIM2_BASE) if (obj->pwm == PWM_2) __TIM2_CLK_ENABLE(); #endif if (obj->pwm == PWM_3) __TIM3_CLK_ENABLE(); if (obj->pwm == PWM_14) __TIM14_CLK_ENABLE(); if (obj->pwm == PWM_15) __TIM15_CLK_ENABLE(); if (obj->pwm == PWM_16) __TIM16_CLK_ENABLE(); if (obj->pwm == PWM_17) __TIM17_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 }
/*init pwm timer block*/ void initPwmTIM16() { __TIM16_CLK_ENABLE(); TIM16->PSC = LCD_PWM_PRESCALE; TIM16->ARR = LCD_PWM_PERIOD; TIM16->CR1 |= (1<<7); TIM16->CCMR1 = 0b01101000; TIM16->EGR |= 0b11100010; TIM16->BDTR |= (1<<15); TIM16->CCER = 0x1; TIM16->CR1 |= 1; }
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; /* Habilita o clock do Timer 3*/ //__TIM3_CLK_ENABLE(); __TIM16_CLK_ENABLE(); /* Habilita o Clock no port C, função definida em stm32f0xx_hal_rcc.h*/ __GPIOB_CLK_ENABLE(); GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF2_TIM16; //GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5; GPIO_InitStruct.Pin = GPIO_PIN_8; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); }