void Timer_t::InitPwm(GPIO_TypeDef *GPIO, uint16_t N, uint8_t Chnl, uint32_t ATopValue, Inverted_t Inverted, PinOutMode_t OutputType) { // GPIO #if defined STM32L1XX if (ITmr == TIM2) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF1); else if(ANY_OF_2(ITmr, TIM3, TIM4)) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF2); else if(ANY_OF_3(ITmr, TIM9, TIM10, TIM11)) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF3); #elif defined STM32F0XX if (ITmr == TIM1) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF2); else if(ITmr == TIM3) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF1); else if(ITmr == TIM14) { if(GPIO == GPIOA) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF4); else PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF0); } #ifdef TIM15 else if(ITmr == TIM15) { if(GPIO == GPIOA) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF0); else PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF1); } #endif else if(ITmr == TIM16 or ITmr == TIM17) { if(GPIO == GPIOA) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF5); else PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF2); } #elif defined STM32F2XX || defined STM32F4XX if(ANY_OF_2(ITmr, TIM1, TIM2)) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF1); else if(ANY_OF_3(ITmr, TIM3, TIM4, TIM5)) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF2); else if(ANY_OF_4(ITmr, TIM8, TIM9, TIM10, TIM11)) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF3); else if(ANY_OF_3(ITmr, TIM12, TIM13, TIM14)) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF9); #elif defined STM32F100_MCUCONF PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF0); // Alternate function is dummy // ITmr->BDTR = 0xC000; // Main output Enable #endif #if !defined STM32L151xB ITmr->BDTR = 0xC000; // Main output Enable #endif ITmr->ARR = ATopValue; // Output uint16_t tmp = (Inverted == invInverted)? 0b111 : 0b110; // PWM mode 1 or 2 switch(Chnl) { case 1: ITmr->CCMR1 |= (tmp << 4); ITmr->CCER |= TIM_CCER_CC1E; break; case 2: ITmr->CCMR1 |= (tmp << 12); ITmr->CCER |= TIM_CCER_CC2E; break; case 3: ITmr->CCMR2 |= (tmp << 4); ITmr->CCER |= TIM_CCER_CC3E; break; case 4: ITmr->CCMR2 |= (tmp << 12); ITmr->CCER |= TIM_CCER_CC4E; break; default: break; } }
void Timer_t::InitPwm(GPIO_TypeDef *GPIO, uint16_t N, uint8_t Chnl, uint32_t ATopValue, Inverted_t Inverted, PinOutMode_t OutputType) { // GPIO if (ITmr == TIM2) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF1); else if(ANY_OF_2(ITmr, TIM3, TIM4)) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF2); else if(ANY_OF_3(ITmr, TIM9, TIM10, TIM11)) PinSetupAlterFunc(GPIO, N, OutputType, pudNone, AF3); ITmr->ARR = ATopValue; // Output uint16_t tmp = (Inverted == invInverted)? 0b111 : 0b110; // PWM mode 1 or 2 switch(Chnl) { case 1: ITmr->CCMR1 |= (tmp << 4); ITmr->CCER |= TIM_CCER_CC1E; break; case 2: ITmr->CCMR1 |= (tmp << 12); ITmr->CCER |= TIM_CCER_CC2E; break; case 3: ITmr->CCMR2 |= (tmp << 4); ITmr->CCER |= TIM_CCER_CC3E; break; case 4: ITmr->CCMR2 |= (tmp << 12); ITmr->CCER |= TIM_CCER_CC4E; break; default: break; } }
void Timer_t::InitPwm(GPIO_TypeDef *GPIO, uint16_t N, uint8_t Chnl, Inverted_t Inverted, const PinSpeed_t ASpeed) { // GPIO if (ITmr == TIM2) PinSetupAlterFunc(GPIO, N, omPushPull, pudNone, AF1, ASpeed); else if(ANY_OF_2(ITmr, TIM3, TIM4)) PinSetupAlterFunc(GPIO, N, omPushPull, pudNone, AF2, ASpeed); else if(ANY_OF_3(ITmr, TIM9, TIM10, TIM11)) PinSetupAlterFunc(GPIO, N, omPushPull, pudNone, AF3, ASpeed); // Output uint16_t tmp = (Inverted == invInverted)? 0b111 : 0b110; // PWM mode 1 or 2 switch(Chnl) { case 1: PCCR = &ITmr->CCR1; ITmr->CCMR1 |= (tmp << 4); ITmr->CCER |= TIM_CCER_CC1E; break; case 2: PCCR = &ITmr->CCR2; ITmr->CCMR1 |= (tmp << 12); ITmr->CCER |= TIM_CCER_CC2E; break; case 3: PCCR = &ITmr->CCR3; ITmr->CCMR2 |= (tmp << 4); ITmr->CCER |= TIM_CCER_CC3E; break; case 4: PCCR = &ITmr->CCR4; ITmr->CCMR2 |= (tmp << 12); ITmr->CCER |= TIM_CCER_CC4E; break; default: break; } }
void Timer_t::PwmInit(GPIO_TypeDef *GPIO, uint16_t N, uint8_t Chnl, Inverted_t Inverted) { // GPIO if (ANY_OF_2(ITmr, TIM1, TIM2)) PinSetupAlterFunc(GPIO, N, omPushPull, pudNone, AF1); else if(ANY_OF_3(ITmr, TIM3, TIM4, TIM5)) PinSetupAlterFunc(GPIO, N, omPushPull, pudNone, AF2); else if(ANY_OF_4(ITmr, TIM8, TIM9, TIM10, TIM11)) PinSetupAlterFunc(GPIO, N, omPushPull, pudNone, AF3); else if(ANY_OF_3(ITmr, TIM12, TIM13, TIM14)) PinSetupAlterFunc(GPIO, N, omPushPull, pudNone, AF9); // Enable outputs for advanced timers ITmr->BDTR = TIM_BDTR_MOE | TIM_BDTR_AOE; // Output uint16_t tmp = (Inverted == invInverted)? 0b111 : 0b110; // PWM mode 1 or 2 switch(Chnl) { case 1: PCCR = &ITmr->CCR1; ITmr->CCMR1 |= (tmp << 4); ITmr->CCER |= TIM_CCER_CC1E; break; case 2: PCCR = &ITmr->CCR2; ITmr->CCMR1 |= (tmp << 12); ITmr->CCER |= TIM_CCER_CC2E; break; case 3: PCCR = &ITmr->CCR3; ITmr->CCMR2 |= (tmp << 4); ITmr->CCER |= TIM_CCER_CC3E; break; case 4: PCCR = &ITmr->CCR4; ITmr->CCMR2 |= (tmp << 12); ITmr->CCER |= TIM_CCER_CC4E; break; default: break; } }