#include #include void (*Ptr_fct_t1) (void); void (*Ptr_fct_t2) (void); void (*Ptr_fct_t3) (void); void (*Ptr_fct_t4) (void); void MyTimer_Init(TIM_TypeDef *Timer, unsigned short ValARR, unsigned short ValPSC){ if (Timer == TIM2) {RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;} else if (Timer == TIM3) {RCC->APB1ENR |= (RCC_APB1ENR_TIM3EN);} else if (Timer == TIM4) {RCC->APB1ENR |= (RCC_APB1ENR_TIM4EN);} else if (Timer == TIM1) {RCC->APB2ENR |= (RCC_APB2ENR_TIM1EN);} Timer->ARR=ValARR-1; Timer->PSC=ValPSC-1; } void MyTimer_ActiveIT (TIM_TypeDef *Timer, char Prio, void (*IT_function) (void)){ if (Timer == TIM2){ Ptr_fct_t2 = IT_function; NVIC->ISER[0] |= 1<<28; NVIC->IPR[35] = Prio<<4; } else if (Timer == TIM3){ Ptr_fct_t3 = IT_function; NVIC->ISER[0] |= 1<<29; NVIC->IPR[36] = Prio<<4; } else if (Timer == TIM4){ Ptr_fct_t4 = IT_function; NVIC->ISER[0] |= 1<<30; NVIC->IPR[37] = Prio<<4; } else if (Timer == TIM1){ Ptr_fct_t1 = IT_function; NVIC->ISER[0] |= 1<<25; NVIC->IPR[32] = Prio<<4; } Timer->DIER|=TIM_DIER_UIE; } void Mytimer_PWM(TIM_TypeDef *Timer, char Channel){ if (Channel == 1) { Timer->CCMR1 &=~ TIM_CCMR1_OC1M; Timer->CCMR1 |= 0x6 << 4; Timer->CCER |= TIM_CCER_CC1E; } else if (Channel == 2) { Timer->CCMR1 &=~ TIM_CCMR1_OC2M; Timer->CCMR1 |= 0x6 << 12; Timer->CCER |= TIM_CCER_CC2E; } else if (Channel == 3) { Timer->CCMR2 &=~ TIM_CCMR2_OC3M; Timer->CCMR2 |= 0x6 << 4; Timer->CCER |= TIM_CCER_CC3E; } else if (Channel == 4) { Timer->CCMR2 &=~ TIM_CCMR2_OC4M; Timer->CCMR2 |= 0x6 << 12; Timer->CCER |= TIM_CCER_CC4E; } } void Mytimer_PWM_cycle(TIM_TypeDef *Timer, char Channel, int pulse){ if (Channel == 1) Timer->CCR1 = Timer->ARR*pulse/100; else if (Channel == 2) Timer->CCR2 = Timer->ARR*pulse/100; else if (Channel == 3) Timer->CCR3 = (Timer->ARR)*pulse/100; else if (Channel == 4) Timer->CCR4 = Timer->ARR*pulse/100; } void TIM2_IRQHandler(void){ TIM2->SR&=~TIM_SR_UIF; Ptr_fct_t2(); } void TIM1_UP_IRQHandler(void){ TIM1->SR&=~TIM_SR_UIF; Ptr_fct_t1(); } void TIM3_IRQHandler(void){ TIM3->SR&=~TIM_SR_UIF; Ptr_fct_t3(); } void TIM4_IRQHandler(void){ TIM4->SR&=~TIM_SR_UIF; Ptr_fct_t4();