#include "MyTimer.h" #include "stm32f10x.h" void (*pointeur_fonction_Timer1)(void); void (*pointeur_fonction_Timer2)(void); void (*pointeur_fonction_Timer3)(void); void (*pointeur_fonction_Timer4)(void); void MyTimer_Base_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; } MyTimer_Base_Start(Timer); Timer->ARR=ValARR-1; Timer->PSC=ValPSC-1; } void MyTimer_ActiveIT(TIM_TypeDef * Timer, char Prio, void (*interrupt) (void)) { if (Timer == TIM2) { NVIC->IPR[28] = Prio<<4; pointeur_fonction_Timer2=interrupt; } else if (Timer == TIM3) { NVIC->IPR[29] = Prio<<4; pointeur_fonction_Timer3=interrupt; } else if (Timer == TIM4) { NVIC->IPR[30] = Prio<<4; pointeur_fonction_Timer4=interrupt; } else if (Timer == TIM1) { NVIC->IPR[25] = Prio<<4; pointeur_fonction_Timer1=interrupt; } } void MyTimer_PWM(TIM_TypeDef * Timer, char Channel) { if (Timer == TIM2 || Timer == TIM3 || Timer == TIM4) { if (Channel == 1 || Channel == 2) { Timer->CCMR1 &= ~(0x1 << 8*(Channel - 1)); Timer->CCMR1 |= (6 << 4); Timer->CCER |= (1 << 4*(Channel - 1)); } else if (Channel == 3 || Channel == 4) { Timer->CCMR2 &= ~(0x1 << 8*(Channel - 3)); Timer->CCMR2 |= (6 << 4); Timer->CCER |= (1 << 4*(Channel - 3)); } } } void MyTimer_PWM_Setup(TIM_TypeDef * Timer, char dutycycle, char channel) { if (channel ==1){ Timer->CCR1 = ((Timer->ARR)*(dutycycle))/100; }else if (channel ==2){ Timer->CCR2 = (Timer->ARR*(dutycycle))/100; }else if (channel ==3){ Timer->CCR3 = (Timer->ARR*(dutycycle))/100; }else if (channel ==4){ Timer->CCR4 = (Timer->ARR*(dutycycle))/100; } } void TIM1_UP_IRQHandler(void) { TIM1->SR &= ~TIM_SR_UIF; pointeur_fonction_Timer1(); } void TIM2_IRQHandler(void) { TIM2->SR &= ~TIM_SR_UIF; pointeur_fonction_Timer2(); } void TIM3_IRQHandler(void) { TIM3->SR &= ~TIM_SR_UIF; pointeur_fonction_Timer3(); } void TIM4_IRQHandler(void) { TIM4->SR &= ~TIM_SR_UIF; pointeur_fonction_Timer4(); }